@ntrr/calendar-kit 0.2.0 → 0.2.1
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/CHANGELOG.md +41 -0
- package/dist/apple/caldav.d.ts +17 -2
- package/dist/apple/caldav.d.ts.map +1 -1
- package/dist/apple/caldav.js +60 -6
- package/dist/apple/caldav.js.map +1 -1
- package/dist/apple/ics-parse.d.ts.map +1 -1
- package/dist/apple/ics-parse.js +202 -25
- package/dist/apple/ics-parse.js.map +1 -1
- package/dist/apple/index.d.ts +2 -1
- package/dist/apple/index.d.ts.map +1 -1
- package/dist/apple/index.js +2 -1
- package/dist/apple/index.js.map +1 -1
- package/dist/apple/zones.d.ts +10 -0
- package/dist/apple/zones.d.ts.map +1 -0
- package/dist/apple/zones.js +85 -0
- package/dist/apple/zones.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.1] — 2026-09-26
|
|
4
|
+
|
|
5
|
+
Correctness release. Every change stops the kit reporting something that is not
|
|
6
|
+
true about a calendar — which matters because Reliant decides whether to place a
|
|
7
|
+
phone call from this data, and a wrong answer means calling someone mid-meeting.
|
|
8
|
+
|
|
9
|
+
**Fixed**
|
|
10
|
+
|
|
11
|
+
- **Non-IANA `TZID`s no longer drop the event** (#1). A Windows zone name —
|
|
12
|
+
`Central Standard Time`, as Outlook and Exchange write — failed to resolve and
|
|
13
|
+
the event vanished silently. Resolution now falls through: IANA name, then a
|
|
14
|
+
Windows/legacy alias table, then a `VTIMEZONE` registered from the same
|
|
15
|
+
calendar, then the floating zone as an approximation. The `VTIMEZONE`
|
|
16
|
+
registration already existed and was never read; its offsets are now used.
|
|
17
|
+
- **The account's own shared calendar is discoverable** (#2). `<CS:shared-owner/>`
|
|
18
|
+
marks a calendar you own and have shared — the family calendar — and it was
|
|
19
|
+
excluded, so discovery failed outright for exactly that setup. The filter was
|
|
20
|
+
also inverted: a calendar shared *into* the account was accepted and could be
|
|
21
|
+
chosen as primary. Owned calendars now outrank shared-in ones.
|
|
22
|
+
- **Intervals never end before they start** (#5). The mixed Zulu/`TZID` repair
|
|
23
|
+
could invert a legitimate 3-hour event and nothing checked. A repair is now
|
|
24
|
+
kept only if it improves the interval, and both parse paths order the endpoints
|
|
25
|
+
before emitting.
|
|
26
|
+
- **`DURATION` is honoured** (#9). An event with `DTSTART` + `DURATION` and no
|
|
27
|
+
`DTEND` parsed zero-length, which reads as *not busy*. Days and weeks are
|
|
28
|
+
treated as nominal and smaller units as exact, per RFC 5545 §3.3.6, so a
|
|
29
|
+
duration spanning a DST transition lands correctly.
|
|
30
|
+
|
|
31
|
+
**Changed**
|
|
32
|
+
|
|
33
|
+
- Published to public npm under MIT; `dist/` is no longer committed (built at
|
|
34
|
+
publish time). Consumers install `@ntrr/calendar-kit` from the registry with no
|
|
35
|
+
credential.
|
|
36
|
+
|
|
37
|
+
**Notes**
|
|
38
|
+
|
|
39
|
+
- An unresolvable `TZID` is now approximated rather than dropped. Visible and
|
|
40
|
+
approximate beats invisible for a free/busy consumer; a diagnostic channel is
|
|
41
|
+
tracked in #3.
|
|
42
|
+
|
|
3
43
|
## [0.2.0] — 2026-08-23
|
|
4
44
|
|
|
5
45
|
First **minor** release — stable baseline before Reliant (and other products) consume the kit.
|
|
@@ -14,5 +54,6 @@ First **minor** release — stable baseline before Reliant (and other products)
|
|
|
14
54
|
|
|
15
55
|
Initial extraction from Hub (development tag; prefer **0.2.0**).
|
|
16
56
|
|
|
57
|
+
[0.2.1]: https://github.com/sm00thindian/ntrr-calendar/releases/tag/v0.2.1
|
|
17
58
|
[0.2.0]: https://github.com/sm00thindian/ntrr-calendar/releases/tag/v0.2.0
|
|
18
59
|
[0.1.0]: https://github.com/sm00thindian/ntrr-calendar/releases/tag/v0.1.0
|
package/dist/apple/caldav.d.ts
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
import type { AppleCalDavAuth, DiscoveredCalendar, FetchEventsRange, FloatingZoneOptions, ParsedCalendarEvent } from "../types.js";
|
|
2
2
|
/**
|
|
3
|
-
* True when resourcetype
|
|
4
|
-
* inbox/outbox/notification/
|
|
3
|
+
* True when resourcetype is a CalDAV calendar collection rather than an
|
|
4
|
+
* inbox/outbox/notification/dropbox.
|
|
5
|
+
*
|
|
6
|
+
* `<CS:shared-owner/>` is deliberately NOT excluded. It marks a calendar the
|
|
7
|
+
* account **owns and has shared with others** — the family calendar, in a
|
|
8
|
+
* household-coordination product. Excluding it made discovery fail outright for
|
|
9
|
+
* exactly the users this exists to serve, with an error telling them to open the
|
|
10
|
+
* Calendar app they had already opened.
|
|
5
11
|
*/
|
|
6
12
|
export declare function isCalDavCalendarCollection(block: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* True when the collection is shared *into* this account — someone else owns it.
|
|
15
|
+
*
|
|
16
|
+
* Distinct from `<CS:shared-owner/>`, which is the account's own shared calendar.
|
|
17
|
+
* Such a calendar is a legitimate candidate but a poor *primary*: Reliant gates
|
|
18
|
+
* outbound calls on the primary calendar's free/busy, so preferring someone
|
|
19
|
+
* else's schedule would silence or allow calls based on the wrong person's day.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isSharedInCalendar(block: string): boolean;
|
|
7
22
|
/**
|
|
8
23
|
* Pick the primary event calendar from a calendar-home PROPFIND Depth:1 body.
|
|
9
24
|
* Prefers common default names, otherwise the first real calendar collection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caldav.d.ts","sourceRoot":"","sources":["../../src/apple/caldav.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AA+CrB
|
|
1
|
+
{"version":3,"file":"caldav.d.ts","sourceRoot":"","sources":["../../src/apple/caldav.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AA+CrB;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAiBjE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASzD;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,kBAAkB,GAAG,IAAI,CAuC3B;AA6DD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,mBAAmB,EAAE,CA0BvB;AAED,mEAAmE;AACnE,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgGhG;AAmBD,iEAAiE;AACjE,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,gBAAgB,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmBhC;AAED,4DAA4D;AAC5D,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAE7B"}
|
package/dist/apple/caldav.js
CHANGED
|
@@ -33,8 +33,14 @@ function extractDisplayName(block) {
|
|
|
33
33
|
return name || null;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* True when resourcetype
|
|
37
|
-
* inbox/outbox/notification/
|
|
36
|
+
* True when resourcetype is a CalDAV calendar collection rather than an
|
|
37
|
+
* inbox/outbox/notification/dropbox.
|
|
38
|
+
*
|
|
39
|
+
* `<CS:shared-owner/>` is deliberately NOT excluded. It marks a calendar the
|
|
40
|
+
* account **owns and has shared with others** — the family calendar, in a
|
|
41
|
+
* household-coordination product. Excluding it made discovery fail outright for
|
|
42
|
+
* exactly the users this exists to serve, with an error telling them to open the
|
|
43
|
+
* Calendar app they had already opened.
|
|
38
44
|
*/
|
|
39
45
|
export function isCalDavCalendarCollection(block) {
|
|
40
46
|
const typeMatch = block.match(/<(?:[A-Za-z0-9_-]+:)?resourcetype[^>]*>([\s\S]*?)<\/(?:[A-Za-z0-9_-]+:)?resourcetype>/i);
|
|
@@ -45,12 +51,27 @@ export function isCalDavCalendarCollection(block) {
|
|
|
45
51
|
if (/<(?:[A-Za-z0-9_-]+:)?schedule-inbox(?:\s|\/|>)/i.test(types) ||
|
|
46
52
|
/<(?:[A-Za-z0-9_-]+:)?schedule-outbox(?:\s|\/|>)/i.test(types) ||
|
|
47
53
|
/<(?:[A-Za-z0-9_-]+:)?notification(?:\s|\/|>)/i.test(types) ||
|
|
48
|
-
/<(?:[A-Za-z0-9_-]+:)?dropbox(?:\s|\/|>)/i.test(types)
|
|
49
|
-
/<(?:[A-Za-z0-9_-]+:)?shared-owner(?:\s|\/|>)/i.test(types)) {
|
|
54
|
+
/<(?:[A-Za-z0-9_-]+:)?dropbox(?:\s|\/|>)/i.test(types)) {
|
|
50
55
|
return false;
|
|
51
56
|
}
|
|
52
57
|
return true;
|
|
53
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* True when the collection is shared *into* this account — someone else owns it.
|
|
61
|
+
*
|
|
62
|
+
* Distinct from `<CS:shared-owner/>`, which is the account's own shared calendar.
|
|
63
|
+
* Such a calendar is a legitimate candidate but a poor *primary*: Reliant gates
|
|
64
|
+
* outbound calls on the primary calendar's free/busy, so preferring someone
|
|
65
|
+
* else's schedule would silence or allow calls based on the wrong person's day.
|
|
66
|
+
*/
|
|
67
|
+
export function isSharedInCalendar(block) {
|
|
68
|
+
const typeMatch = block.match(/<(?:[A-Za-z0-9_-]+:)?resourcetype[^>]*>([\s\S]*?)<\/(?:[A-Za-z0-9_-]+:)?resourcetype>/i);
|
|
69
|
+
const types = typeMatch?.[1] ?? "";
|
|
70
|
+
if (/<(?:[A-Za-z0-9_-]+:)?shared-owner(?:\s|\/|>)/i.test(types)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return /<(?:[A-Za-z0-9_-]+:)?shared(?:\s|\/|>)/i.test(types);
|
|
74
|
+
}
|
|
54
75
|
/**
|
|
55
76
|
* Pick the primary event calendar from a calendar-home PROPFIND Depth:1 body.
|
|
56
77
|
* Prefers common default names, otherwise the first real calendar collection.
|
|
@@ -73,13 +94,21 @@ export function pickPrimaryCalendarFromHomeXml(calendarsXml, baseUrl) {
|
|
|
73
94
|
candidates.push({
|
|
74
95
|
calendarUrl: absolute.toString(),
|
|
75
96
|
calendarName: extractDisplayName(block) || "iCloud Calendar",
|
|
97
|
+
sharedIn: isSharedInCalendar(block),
|
|
76
98
|
});
|
|
77
99
|
}
|
|
78
100
|
if (!candidates.length) {
|
|
79
101
|
return null;
|
|
80
102
|
}
|
|
81
|
-
|
|
82
|
-
|
|
103
|
+
// Owned calendars outrank ones shared into the account. Reliant gates dials on
|
|
104
|
+
// the primary calendar's free/busy, so falling back to someone else's schedule
|
|
105
|
+
// would decide calls by the wrong person's day. Within each group the existing
|
|
106
|
+
// name preference applies.
|
|
107
|
+
const owned = candidates.filter((entry) => !entry.sharedIn);
|
|
108
|
+
const ranked = owned.length ? owned : candidates;
|
|
109
|
+
const preferred = ranked.find((entry) => /^(home|calendar|icloud|personal)$/i.test(entry.calendarName.trim()));
|
|
110
|
+
const chosen = preferred ?? ranked[0];
|
|
111
|
+
return { calendarUrl: chosen.calendarUrl, calendarName: chosen.calendarName };
|
|
83
112
|
}
|
|
84
113
|
async function caldavRequest(url, method, auth, body, depth = "0") {
|
|
85
114
|
const response = await fetch(url, {
|
|
@@ -199,8 +228,33 @@ export async function discoverPrimaryCalendar(auth) {
|
|
|
199
228
|
if (picked) {
|
|
200
229
|
return picked;
|
|
201
230
|
}
|
|
231
|
+
// Distinguish "the home is empty" from "collections exist but none qualified".
|
|
232
|
+
// The old message told the user to open the Calendar app, which is unactionable
|
|
233
|
+
// when the calendar plainly exists and was filtered out — the exact situation
|
|
234
|
+
// that hid the shared-owner bug (#2).
|
|
235
|
+
const responseCount = splitMultistatusResponses(calendarsProbe.xml).length;
|
|
236
|
+
if (responseCount > 1) {
|
|
237
|
+
const kinds = collectionKinds(calendarsProbe.xml);
|
|
238
|
+
throw new Error(`Found ${responseCount} CalDAV collections on this iCloud account but none usable as an event calendar` +
|
|
239
|
+
(kinds.length ? ` (resourcetypes seen: ${kinds.join(", ")})` : "") +
|
|
240
|
+
". This is a filtering problem, not a setup problem — please report it.");
|
|
241
|
+
}
|
|
202
242
|
throw new Error("No CalDAV calendar collection found on this iCloud account. Open the Calendar app once, confirm iCloud Calendar is on, add an event, then try again.");
|
|
203
243
|
}
|
|
244
|
+
/** Resourcetype element names seen in a home response, for diagnosing a filter miss. */
|
|
245
|
+
function collectionKinds(calendarsXml) {
|
|
246
|
+
const kinds = new Set();
|
|
247
|
+
for (const block of splitMultistatusResponses(calendarsXml)) {
|
|
248
|
+
const typeMatch = block.match(/<(?:[A-Za-z0-9_-]+:)?resourcetype[^>]*>([\s\S]*?)<\/(?:[A-Za-z0-9_-]+:)?resourcetype>/i);
|
|
249
|
+
for (const el of typeMatch?.[1]?.match(/<(?:[A-Za-z0-9_-]+:)?([A-Za-z0-9_-]+)/g) ?? []) {
|
|
250
|
+
const name = el.replace(/^<(?:[A-Za-z0-9_-]+:)?/, "");
|
|
251
|
+
if (name && name !== "collection") {
|
|
252
|
+
kinds.add(name);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return [...kinds].sort();
|
|
257
|
+
}
|
|
204
258
|
/** Fetch VEVENTs from a CalDAV calendar URL for a time range. */
|
|
205
259
|
export async function fetchEvents(auth, calendarUrl, range, options) {
|
|
206
260
|
const token = basicAuth(auth.appleId, auth.appPassword);
|
package/dist/apple/caldav.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caldav.js","sourceRoot":"","sources":["../../src/apple/caldav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,SAAS,SAAS,CAAC,OAAe,EAAE,WAAmB;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,GAAW;IAC3C,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,wBAAwB,GAAG,6EAA6E,EACxG,GAAG,CACJ,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,MAAc;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrG,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAW;IAC5C,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACjG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CACvB,mFAAmF,CACpF,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"caldav.js","sourceRoot":"","sources":["../../src/apple/caldav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,SAAS,SAAS,CAAC,OAAe,EAAE,WAAmB;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,GAAW;IAC3C,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,wBAAwB,GAAG,6EAA6E,EACxG,GAAG,CACJ,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,MAAc;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrG,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAW;IAC5C,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACjG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CACvB,mFAAmF,CACpF,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,wFAAwF,CACzF,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IACE,iDAAiD,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7D,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9D,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3D,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC,EACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,wFAAwF,CACzF,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,yCAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,YAAoB,EACpB,OAAe;IAEf,MAAM,UAAU,GAAmD,EAAE,CAAC;IAEtE,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9E,SAAS;QACX,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACd,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAChC,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,iBAAiB;YAC5D,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,2BAA2B;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACtC,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CACrE,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC;IACvC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAW,EACX,MAAc,EACd,IAAY,EACZ,IAAa,EACb,KAAK,GAAG,GAAG;IAEX,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM;QACN,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,IAAI,EAAE;YAC9B,KAAK,EAAE,KAAK;YACZ,cAAc,EAAE,gCAAgC;SACjD;QACD,IAAI;QACJ,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,YAAY,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAChG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CACvB,gFAAgF,CACjF,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,OAA6B;IAE7B,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,cAAc,GAClB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1D,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEZ,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;YAC7D,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAqB;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAExD,IAAI,OAAO,GAAG,WAAW,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,8CAA8C,EAC9C,UAAU,EACV,KAAK,EACL;;;cAGQ,EACR,GAAG,CACJ,CAAC;QACF,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,aAAa,CACxC,OAAO,EACP,UAAU,EACV,KAAK,EACL;;;cAGU,EACV,GAAG,CACJ,CAAC;IAEF,MAAM,aAAa,GACjB,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,wBAAwB,CAAC;QACzD,gBAAgB,CAAC,cAAc,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;IACjE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3F,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,YAAY,EACZ,UAAU,EACV,KAAK,EACL;;;cAGU,EACV,GAAG,CACJ,CAAC;IAEF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjF,MAAM,cAAc,GAAG,MAAM,aAAa,CACxC,OAAO,EACP,UAAU,EACV,KAAK,EACL;;;;;;;cAOU,EACV,GAAG,CACJ,CAAC;IAEF,MAAM,MAAM,GAAG,8BAA8B,CAC3C,cAAc,CAAC,GAAG,EAClB,cAAc,CAAC,QAAQ,IAAI,OAAO,CACnC,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+EAA+E;IAC/E,gFAAgF;IAChF,8EAA8E;IAC9E,sCAAsC;IACtC,MAAM,aAAa,GAAG,yBAAyB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3E,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,SAAS,aAAa,iFAAiF;YACrG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sJAAsJ,CACvJ,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,SAAS,eAAe,CAAC,YAAoB;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,wFAAwF,CACzF,CAAC;QACF,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,wCAAwC,CAAC,IAAI,EAAE,EAAE,CAAC;YACvF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,IAAI,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBAClC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAqB,EACrB,WAAmB,EACnB,KAAuB,EACvB,OAA6B;IAE7B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG;;;;;;;;;+BASgB,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;;;;oBAI3E,CAAC;IAEnB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7E,OAAO,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAqB;IAErB,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ics-parse.d.ts","sourceRoot":"","sources":["../../src/apple/ics-parse.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ics-parse.d.ts","sourceRoot":"","sources":["../../src/apple/ics-parse.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoJ5E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,YAAY,EAAE,MAAM,GACnB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8E1E;AA8CD,qEAAqE;AACrE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,YAAY,EAAE,MAAM,GACnB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmE1E;AAgBD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,mBAAmB,EAAE,CAiEvB;AAiJD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAa1F"}
|
package/dist/apple/ics-parse.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ICAL from "ical.js";
|
|
2
|
-
import { DateTime } from "luxon";
|
|
2
|
+
import { DateTime, Duration } from "luxon";
|
|
3
|
+
import { resolveZoneAlias } from "./zones.js";
|
|
3
4
|
function wrapCalendar(ics) {
|
|
4
5
|
const trimmed = ics.trim();
|
|
5
6
|
if (/BEGIN:VCALENDAR/i.test(trimmed)) {
|
|
@@ -25,6 +26,83 @@ function civilString(time) {
|
|
|
25
26
|
}
|
|
26
27
|
return civilFromParts(time.year, time.month, time.day, time.hour, time.minute, time.second);
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* RFC 5545 §3.6.1 lets an event carry DURATION instead of DTEND, and Apple emits
|
|
31
|
+
* that form. Without this, such an event parses zero-length — which a free/busy
|
|
32
|
+
* consumer reads as **not busy**, so Reliant would place a call during a
|
|
33
|
+
* 90-minute appointment. DTEND wins when both are present, per spec.
|
|
34
|
+
*
|
|
35
|
+
* Units are not interchangeable here. RFC 5545 §3.3.6 makes days and weeks
|
|
36
|
+
* **nominal** (wall clock) and hours, minutes and seconds **exact**. Across the
|
|
37
|
+
* US autumn transition, starting 01:00:
|
|
38
|
+
*
|
|
39
|
+
* P1D → 01:00 the next day, 25 hours later (nominal: wall clock preserved)
|
|
40
|
+
* PT2H → 02:00 the same day, 2 hours later (exact: elapsed time preserved)
|
|
41
|
+
*
|
|
42
|
+
* Flattening the duration to seconds would make P1D exact and land it an hour
|
|
43
|
+
* early. So the parsed units are handed to Luxon intact — it treats weeks and
|
|
44
|
+
* days as calendar units and smaller ones as exact — and the arithmetic is done
|
|
45
|
+
* in the event's own zone, which is what makes the nominal case work.
|
|
46
|
+
*/
|
|
47
|
+
function endFromDuration(start, duration) {
|
|
48
|
+
if (!duration.isValid || duration.as("milliseconds") <= 0) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const zoned = DateTime.fromISO(start.iso, { zone: "utc" }).setZone(start.zoneUsed);
|
|
52
|
+
if (!zoned.isValid) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const ends = zoned.plus(duration);
|
|
56
|
+
const iso = ends.toUTC().toISO();
|
|
57
|
+
if (!iso) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
iso,
|
|
62
|
+
allDay: start.allDay,
|
|
63
|
+
zoneUsed: start.zoneUsed,
|
|
64
|
+
civil: civilFromParts(ends.year, ends.month, ends.day, ends.hour, ends.minute, ends.second, start.allDay),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Whether a candidate mixed Zulu/TZID repair is worth committing.
|
|
69
|
+
*
|
|
70
|
+
* The heuristic fires on a duration that is negative or over two hours, then
|
|
71
|
+
* reinterprets one side as wall time. It never re-checked what it produced, so it
|
|
72
|
+
* could turn a merely long event into an inverted one — a 3h event across two
|
|
73
|
+
* zones came out ending two hours before it started (#5).
|
|
74
|
+
*
|
|
75
|
+
* A repair is kept only when it yields a non-negative duration, and either the
|
|
76
|
+
* original was negative (anything ordered is an improvement) or the result is
|
|
77
|
+
* shorter (the heuristic exists to collapse an implausibly long span).
|
|
78
|
+
*/
|
|
79
|
+
function improvesInterval(originalMs, repairedMs) {
|
|
80
|
+
if (!Number.isFinite(repairedMs) || repairedMs < 0) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (originalMs < 0) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
return repairedMs < originalMs;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Last line of defence: never emit an interval that ends before it starts.
|
|
90
|
+
*
|
|
91
|
+
* A negative interval is undefined behaviour in any overlap check — depending on
|
|
92
|
+
* the comparison it reads as always-busy or never-busy, and Reliant gates calls
|
|
93
|
+
* on exactly that. When the endpoints are merely out of order (invalid per RFC
|
|
94
|
+
* 5545 §3.6.1), the honest repair is to order them rather than collapse the event
|
|
95
|
+
* to a point: a zero-length event reads as *not busy*, which is the failure mode
|
|
96
|
+
* #9 was about, and would silently drop a real commitment from the gate.
|
|
97
|
+
*/
|
|
98
|
+
function orderInstants(start, end) {
|
|
99
|
+
const startMs = Date.parse(start.iso);
|
|
100
|
+
const endMs = Date.parse(end.iso);
|
|
101
|
+
if (Number.isFinite(startMs) && Number.isFinite(endMs) && endMs < startMs) {
|
|
102
|
+
return { start: end, end: start };
|
|
103
|
+
}
|
|
104
|
+
return { start, end };
|
|
105
|
+
}
|
|
28
106
|
function rawProperty(prop) {
|
|
29
107
|
if (!prop) {
|
|
30
108
|
return undefined;
|
|
@@ -52,9 +130,39 @@ export function icalTimeToUtcIso(time, tzid, floatingZone) {
|
|
|
52
130
|
const iso = DateTime.utc(time.year, time.month, time.day, time.hour, time.minute, time.second).toISO();
|
|
53
131
|
return iso ? { iso, allDay: false, zoneUsed: "UTC", civil } : null;
|
|
54
132
|
}
|
|
55
|
-
const
|
|
133
|
+
const declared = (typeof tzid === "string" && tzid.trim()) ||
|
|
56
134
|
(time.zone?.tzid && time.zone.tzid !== "floating" ? time.zone.tzid : null) ||
|
|
57
|
-
|
|
135
|
+
"";
|
|
136
|
+
// Resolution order (#1). A TZID Luxon cannot parse used to return null here,
|
|
137
|
+
// and the caller skipped the event — so an Outlook invite carrying a Windows
|
|
138
|
+
// zone name vanished, taking a real commitment out of Reliant's busy gate.
|
|
139
|
+
// 1. already an IANA zone, or a known Windows/legacy alias
|
|
140
|
+
// 2. a VTIMEZONE registered from this calendar — the registration loop above
|
|
141
|
+
// existed but its offsets were never consulted
|
|
142
|
+
// 3. the floating zone, as a last resort rather than dropping
|
|
143
|
+
const aliased = resolveZoneAlias(declared);
|
|
144
|
+
if (aliased) {
|
|
145
|
+
const local = DateTime.fromObject({
|
|
146
|
+
year: time.year,
|
|
147
|
+
month: time.month,
|
|
148
|
+
day: time.day,
|
|
149
|
+
hour: time.hour,
|
|
150
|
+
minute: time.minute,
|
|
151
|
+
second: time.second,
|
|
152
|
+
}, { zone: aliased });
|
|
153
|
+
if (local.isValid) {
|
|
154
|
+
const iso = local.toUTC().toISO();
|
|
155
|
+
if (iso) {
|
|
156
|
+
return { iso, allDay: false, zoneUsed: aliased, civil };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (declared) {
|
|
161
|
+
const fromVtimezone = utcIsoFromRegisteredVtimezone(time, declared);
|
|
162
|
+
if (fromVtimezone) {
|
|
163
|
+
return { iso: fromVtimezone, allDay: false, zoneUsed: declared, civil };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
58
166
|
const local = DateTime.fromObject({
|
|
59
167
|
year: time.year,
|
|
60
168
|
month: time.month,
|
|
@@ -62,12 +170,49 @@ export function icalTimeToUtcIso(time, tzid, floatingZone) {
|
|
|
62
170
|
hour: time.hour,
|
|
63
171
|
minute: time.minute,
|
|
64
172
|
second: time.second,
|
|
65
|
-
}, { zone });
|
|
173
|
+
}, { zone: floatingZone });
|
|
66
174
|
if (!local.isValid) {
|
|
67
175
|
return null;
|
|
68
176
|
}
|
|
69
177
|
const iso = local.toUTC().toISO();
|
|
70
|
-
return iso ? { iso, allDay: false, zoneUsed:
|
|
178
|
+
return iso ? { iso, allDay: false, zoneUsed: floatingZone, civil } : null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Use a VTIMEZONE registered from this calendar to place a civil time on the
|
|
182
|
+
* UTC timeline.
|
|
183
|
+
*
|
|
184
|
+
* An Outlook invite carries both a Windows zone name and the VTIMEZONE defining
|
|
185
|
+
* its offsets — everything needed to resolve it. The registration loop in
|
|
186
|
+
* parseWithIcalJs already put those into ICAL.TimezoneService; before this, the
|
|
187
|
+
* offsets were never read, so the registration was dead code.
|
|
188
|
+
*/
|
|
189
|
+
function utcIsoFromRegisteredVtimezone(time, tzid) {
|
|
190
|
+
try {
|
|
191
|
+
const registered = ICAL.TimezoneService.get(tzid.trim().replace(/^["']|["']$/g, ""));
|
|
192
|
+
if (!registered) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
const wall = ICAL.Time.fromData({
|
|
196
|
+
year: time.year,
|
|
197
|
+
month: time.month,
|
|
198
|
+
day: time.day,
|
|
199
|
+
hour: time.hour,
|
|
200
|
+
minute: time.minute,
|
|
201
|
+
second: time.second,
|
|
202
|
+
isDate: false,
|
|
203
|
+
});
|
|
204
|
+
const offsetSeconds = registered.utcOffset(wall);
|
|
205
|
+
if (!Number.isFinite(offsetSeconds)) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
const iso = DateTime.utc(time.year, time.month, time.day, time.hour, time.minute, time.second)
|
|
209
|
+
.minus({ seconds: offsetSeconds })
|
|
210
|
+
.toISO();
|
|
211
|
+
return iso ?? null;
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
71
216
|
}
|
|
72
217
|
/** Luxon conversion for raw ICS date-time tokens (fallback path). */
|
|
73
218
|
export function luxonFromIcsToken(value, tzid, floatingZone) {
|
|
@@ -114,7 +259,12 @@ export function luxonFromIcsToken(value, tzid, floatingZone) {
|
|
|
114
259
|
const iso = DateTime.utc(year, month, day, hour, minute, second).toISO();
|
|
115
260
|
return iso ? { iso, allDay: false, zoneUsed: "UTC", civil } : null;
|
|
116
261
|
}
|
|
117
|
-
|
|
262
|
+
// Same resolution order as the ical.js path, minus the VTIMEZONE step: this
|
|
263
|
+
// parser is chosen precisely when ical.js cannot be trusted, so there is no
|
|
264
|
+
// registry to consult. A Windows zone name still resolves via the alias table,
|
|
265
|
+
// and an unknown one falls back to the floating zone instead of dropping (#1).
|
|
266
|
+
const declared = tzid?.replace(/^["']|["']$/g, "").trim() || "";
|
|
267
|
+
const zone = (resolveZoneAlias(declared) || floatingZone).trim();
|
|
118
268
|
const local = DateTime.fromObject({ year, month, day, hour, minute, second }, { zone });
|
|
119
269
|
if (!local.isValid) {
|
|
120
270
|
return null;
|
|
@@ -150,7 +300,8 @@ export function parseIcsLuxonFallback(ics, options) {
|
|
|
150
300
|
const uid = fieldLine(block, "UID")?.value;
|
|
151
301
|
const summary = fieldLine(block, "SUMMARY")?.value;
|
|
152
302
|
const dtstart = fieldLine(block, "DTSTART");
|
|
153
|
-
const
|
|
303
|
+
const dtendLine = fieldLine(block, "DTEND");
|
|
304
|
+
const dtend = dtendLine ?? dtstart;
|
|
154
305
|
if (!uid || !summary || !dtstart || !dtend) {
|
|
155
306
|
continue;
|
|
156
307
|
}
|
|
@@ -158,24 +309,35 @@ export function parseIcsLuxonFallback(ics, options) {
|
|
|
158
309
|
const endTzid = tzidFromParams(dtend.params) ?? startTzid;
|
|
159
310
|
const sharedTzid = startTzid || endTzid;
|
|
160
311
|
const start = luxonFromIcsToken(dtstart.value, startTzid || sharedTzid, defaultFloating);
|
|
161
|
-
|
|
312
|
+
let end = luxonFromIcsToken(dtend.value, endTzid || sharedTzid, defaultFloating);
|
|
162
313
|
if (!start || !end) {
|
|
163
314
|
continue;
|
|
164
315
|
}
|
|
316
|
+
// No DTEND: derive the end from DURATION rather than leaving it zero-length (#9).
|
|
317
|
+
if (!dtendLine) {
|
|
318
|
+
const durationToken = fieldLine(block, "DURATION")?.value?.trim();
|
|
319
|
+
if (durationToken) {
|
|
320
|
+
end = endFromDuration(start, Duration.fromISO(durationToken)) ?? end;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
165
323
|
const description = fieldLine(block, "DESCRIPTION")?.value;
|
|
166
324
|
const location = fieldLine(block, "LOCATION")?.value;
|
|
325
|
+
// Never emit an interval that ends before it starts (#5).
|
|
326
|
+
const ordered = orderInstants(start, end);
|
|
327
|
+
const startOrdered = ordered.start;
|
|
328
|
+
const endOrdered = ordered.end;
|
|
167
329
|
events.push({
|
|
168
330
|
uid,
|
|
169
331
|
title: summary,
|
|
170
332
|
description,
|
|
171
333
|
location,
|
|
172
|
-
startsAt:
|
|
173
|
-
endsAt:
|
|
174
|
-
allDay:
|
|
175
|
-
startsTzid:
|
|
176
|
-
endsTzid:
|
|
177
|
-
startsCivil:
|
|
178
|
-
endsCivil:
|
|
334
|
+
startsAt: startOrdered.iso,
|
|
335
|
+
endsAt: endOrdered.iso,
|
|
336
|
+
allDay: startOrdered.allDay,
|
|
337
|
+
startsTzid: startOrdered.zoneUsed !== "UTC" ? startOrdered.zoneUsed : sharedTzid || undefined,
|
|
338
|
+
endsTzid: endOrdered.zoneUsed !== "UTC" ? endOrdered.zoneUsed : sharedTzid || undefined,
|
|
339
|
+
startsCivil: startOrdered.civil,
|
|
340
|
+
endsCivil: endOrdered.civil,
|
|
179
341
|
rawDtStart: startTzid ? `TZID=${startTzid}:${dtstart.value}` : dtstart.value,
|
|
180
342
|
rawDtEnd: endTzid ? `TZID=${endTzid}:${dtend.value}` : dtend.value,
|
|
181
343
|
});
|
|
@@ -212,7 +374,8 @@ function parseWithIcalJs(ics, floatingZone) {
|
|
|
212
374
|
const summaryProp = vevent.getFirstProperty("summary");
|
|
213
375
|
const uidProp = vevent.getFirstProperty("uid");
|
|
214
376
|
const dtstartProp = vevent.getFirstProperty("dtstart");
|
|
215
|
-
const
|
|
377
|
+
const dtendPropRaw = vevent.getFirstProperty("dtend");
|
|
378
|
+
const dtendProp = dtendPropRaw ?? dtstartProp;
|
|
216
379
|
if (!summaryProp || !uidProp || !dtstartProp || !dtendProp) {
|
|
217
380
|
continue;
|
|
218
381
|
}
|
|
@@ -245,7 +408,7 @@ function parseWithIcalJs(ics, floatingZone) {
|
|
|
245
408
|
}, { zone: sharedTzid });
|
|
246
409
|
if (repaired.isValid) {
|
|
247
410
|
const iso = repaired.toUTC().toISO();
|
|
248
|
-
if (iso) {
|
|
411
|
+
if (iso && improvesInterval(durationMs, Date.parse(end.iso) - Date.parse(iso))) {
|
|
249
412
|
start = { iso, allDay: false, zoneUsed: sharedTzid, civil: civilString(startTime) };
|
|
250
413
|
}
|
|
251
414
|
}
|
|
@@ -261,26 +424,40 @@ function parseWithIcalJs(ics, floatingZone) {
|
|
|
261
424
|
}, { zone: sharedTzid });
|
|
262
425
|
if (repaired.isValid) {
|
|
263
426
|
const iso = repaired.toUTC().toISO();
|
|
264
|
-
if (iso) {
|
|
427
|
+
if (iso && improvesInterval(durationMs, Date.parse(iso) - Date.parse(start.iso))) {
|
|
265
428
|
end = { iso, allDay: false, zoneUsed: sharedTzid, civil: civilString(endTime) };
|
|
266
429
|
}
|
|
267
430
|
}
|
|
268
431
|
}
|
|
269
432
|
}
|
|
433
|
+
// No DTEND: derive the end from DURATION rather than leaving it zero-length (#9).
|
|
434
|
+
if (!dtendPropRaw && start && end) {
|
|
435
|
+
// Use the ICS token, not ICAL.Duration.toSeconds(): seconds would flatten
|
|
436
|
+
// a nominal P1D into an exact 86400s and drift across a DST transition.
|
|
437
|
+
const durationValue = vevent.getFirstProperty("duration")?.getFirstValue();
|
|
438
|
+
const durationToken = durationValue != null ? String(durationValue).trim() : "";
|
|
439
|
+
if (durationToken) {
|
|
440
|
+
end = endFromDuration(start, Duration.fromISO(durationToken)) ?? end;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
270
443
|
const description = vevent.getFirstPropertyValue("description");
|
|
271
444
|
const location = vevent.getFirstPropertyValue("location");
|
|
445
|
+
// Never emit an interval that ends before it starts (#5).
|
|
446
|
+
const ordered = orderInstants(start, end);
|
|
447
|
+
const startOrdered = ordered.start;
|
|
448
|
+
const endOrdered = ordered.end;
|
|
272
449
|
events.push({
|
|
273
450
|
uid: String(uidProp.getFirstValue()),
|
|
274
451
|
title: String(summaryProp.getFirstValue()),
|
|
275
452
|
description: description != null ? String(description) : undefined,
|
|
276
453
|
location: location != null ? String(location) : undefined,
|
|
277
|
-
startsAt:
|
|
278
|
-
endsAt:
|
|
279
|
-
allDay:
|
|
280
|
-
startsTzid:
|
|
281
|
-
endsTzid:
|
|
282
|
-
startsCivil:
|
|
283
|
-
endsCivil:
|
|
454
|
+
startsAt: startOrdered.iso,
|
|
455
|
+
endsAt: endOrdered.iso,
|
|
456
|
+
allDay: startOrdered.allDay,
|
|
457
|
+
startsTzid: startOrdered.zoneUsed !== "UTC" ? startOrdered.zoneUsed : sharedTzid || undefined,
|
|
458
|
+
endsTzid: endOrdered.zoneUsed !== "UTC" ? endOrdered.zoneUsed : sharedTzid || undefined,
|
|
459
|
+
startsCivil: startOrdered.civil,
|
|
460
|
+
endsCivil: endOrdered.civil,
|
|
284
461
|
rawDtStart: rawProperty(dtstartProp),
|
|
285
462
|
rawDtEnd: rawProperty(dtendProp),
|
|
286
463
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ics-parse.js","sourceRoot":"","sources":["../../src/apple/ics-parse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ics-parse.js","sourceRoot":"","sources":["../../src/apple/ics-parse.ts"],"names":[],"mappings":"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"}
|
package/dist/apple/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { discoverPrimaryCalendar, fetchEvents, isCalDavCalendarCollection, parseCalDavReport, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./caldav.js";
|
|
1
|
+
export { discoverPrimaryCalendar, fetchEvents, isCalDavCalendarCollection, isSharedInCalendar, parseCalDavReport, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./caldav.js";
|
|
2
2
|
export { icalTimeToUtcIso, luxonFromIcsToken, parseIcs, parseIcsLuxonFallback, } from "./ics-parse.js";
|
|
3
|
+
export { resolveZoneAlias, isResolvableZone, normalizeTzidKey } from "./zones.js";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,iBAAiB,EACjB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,GACtB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/apple/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { discoverPrimaryCalendar, fetchEvents, isCalDavCalendarCollection, parseCalDavReport, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./caldav.js";
|
|
1
|
+
export { discoverPrimaryCalendar, fetchEvents, isCalDavCalendarCollection, isSharedInCalendar, parseCalDavReport, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./caldav.js";
|
|
2
2
|
export { icalTimeToUtcIso, luxonFromIcsToken, parseIcs, parseIcsLuxonFallback, } from "./ics-parse.js";
|
|
3
|
+
export { resolveZoneAlias, isResolvableZone, normalizeTzidKey } from "./zones.js";
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/apple/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,iBAAiB,EACjB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,GACtB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Strip the quoting and casing variance feeds apply to TZID values. */
|
|
2
|
+
export declare function normalizeTzidKey(tzid: string): string;
|
|
3
|
+
/** True when Luxon can resolve the name as an IANA zone. */
|
|
4
|
+
export declare function isResolvableZone(tzid: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Map a Windows or legacy zone name onto an IANA zone, or null when unknown.
|
|
7
|
+
* Returns the input unchanged when it already resolves.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveZoneAlias(tzid: string | null | undefined): string | null;
|
|
10
|
+
//# sourceMappingURL=zones.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zones.d.ts","sourceRoot":"","sources":["../../src/apple/zones.ts"],"names":[],"mappings":"AA6DA,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAY/E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { DateTime } from "luxon";
|
|
2
|
+
/**
|
|
3
|
+
* Windows and legacy zone names seen on invitations that land in iCloud.
|
|
4
|
+
*
|
|
5
|
+
* Outlook and Exchange write Windows zone names (`Central Standard Time`)
|
|
6
|
+
* rather than IANA ones, and Luxon rejects them — which used to drop the event
|
|
7
|
+
* entirely. This is deliberately the handful that actually arrive, not the full
|
|
8
|
+
* CLDR windowsZones list: a short table is auditable, and an unknown name now
|
|
9
|
+
* falls back rather than dropping, so a miss costs accuracy instead of the event.
|
|
10
|
+
*
|
|
11
|
+
* Keys are compared case-insensitively with surrounding quotes and whitespace
|
|
12
|
+
* stripped, because feeds quote them inconsistently (`TZID="Central Standard Time"`).
|
|
13
|
+
*/
|
|
14
|
+
const WINDOWS_ZONE_ALIASES = {
|
|
15
|
+
"dateline standard time": "Etc/GMT+12",
|
|
16
|
+
"hawaiian standard time": "Pacific/Honolulu",
|
|
17
|
+
"alaskan standard time": "America/Anchorage",
|
|
18
|
+
"pacific standard time": "America/Los_Angeles",
|
|
19
|
+
"pacific standard time (mexico)": "America/Tijuana",
|
|
20
|
+
"us mountain standard time": "America/Phoenix",
|
|
21
|
+
"mountain standard time": "America/Denver",
|
|
22
|
+
"mountain standard time (mexico)": "America/Chihuahua",
|
|
23
|
+
"central standard time": "America/Chicago",
|
|
24
|
+
"central standard time (mexico)": "America/Mexico_City",
|
|
25
|
+
"canada central standard time": "America/Regina",
|
|
26
|
+
"eastern standard time": "America/New_York",
|
|
27
|
+
"us eastern standard time": "America/New_York",
|
|
28
|
+
"atlantic standard time": "America/Halifax",
|
|
29
|
+
"newfoundland standard time": "America/St_Johns",
|
|
30
|
+
"sa pacific standard time": "America/Bogota",
|
|
31
|
+
"sa eastern standard time": "America/Cayenne",
|
|
32
|
+
"e. south america standard time": "America/Sao_Paulo",
|
|
33
|
+
"argentina standard time": "America/Argentina/Buenos_Aires",
|
|
34
|
+
"greenwich standard time": "Atlantic/Reykjavik",
|
|
35
|
+
"gmt standard time": "Europe/London",
|
|
36
|
+
"w. europe standard time": "Europe/Berlin",
|
|
37
|
+
"central europe standard time": "Europe/Budapest",
|
|
38
|
+
"central european standard time": "Europe/Warsaw",
|
|
39
|
+
"romance standard time": "Europe/Paris",
|
|
40
|
+
"e. europe standard time": "Europe/Chisinau",
|
|
41
|
+
"fle standard time": "Europe/Kiev",
|
|
42
|
+
"gtb standard time": "Europe/Bucharest",
|
|
43
|
+
"israel standard time": "Asia/Jerusalem",
|
|
44
|
+
"arabic standard time": "Asia/Baghdad",
|
|
45
|
+
"arab standard time": "Asia/Riyadh",
|
|
46
|
+
"russian standard time": "Europe/Moscow",
|
|
47
|
+
"india standard time": "Asia/Kolkata",
|
|
48
|
+
"china standard time": "Asia/Shanghai",
|
|
49
|
+
"singapore standard time": "Asia/Singapore",
|
|
50
|
+
"w. australia standard time": "Australia/Perth",
|
|
51
|
+
"tokyo standard time": "Asia/Tokyo",
|
|
52
|
+
"korea standard time": "Asia/Seoul",
|
|
53
|
+
"cen. australia standard time": "Australia/Adelaide",
|
|
54
|
+
"aus eastern standard time": "Australia/Sydney",
|
|
55
|
+
"e. australia standard time": "Australia/Brisbane",
|
|
56
|
+
"new zealand standard time": "Pacific/Auckland",
|
|
57
|
+
"utc": "UTC",
|
|
58
|
+
"coordinated universal time": "UTC",
|
|
59
|
+
};
|
|
60
|
+
/** Strip the quoting and casing variance feeds apply to TZID values. */
|
|
61
|
+
export function normalizeTzidKey(tzid) {
|
|
62
|
+
return tzid.trim().replace(/^["']|["']$/g, "").trim().toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
/** True when Luxon can resolve the name as an IANA zone. */
|
|
65
|
+
export function isResolvableZone(tzid) {
|
|
66
|
+
return DateTime.now().setZone(tzid).isValid;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Map a Windows or legacy zone name onto an IANA zone, or null when unknown.
|
|
70
|
+
* Returns the input unchanged when it already resolves.
|
|
71
|
+
*/
|
|
72
|
+
export function resolveZoneAlias(tzid) {
|
|
73
|
+
if (typeof tzid !== "string") {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const raw = tzid.trim().replace(/^["']|["']$/g, "").trim();
|
|
77
|
+
if (!raw) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
if (isResolvableZone(raw)) {
|
|
81
|
+
return raw;
|
|
82
|
+
}
|
|
83
|
+
return WINDOWS_ZONE_ALIASES[normalizeTzidKey(raw)] ?? null;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=zones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zones.js","sourceRoot":"","sources":["../../src/apple/zones.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,oBAAoB,GAA2B;IACnD,wBAAwB,EAAE,YAAY;IACtC,wBAAwB,EAAE,kBAAkB;IAC5C,uBAAuB,EAAE,mBAAmB;IAC5C,uBAAuB,EAAE,qBAAqB;IAC9C,gCAAgC,EAAE,iBAAiB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,wBAAwB,EAAE,gBAAgB;IAC1C,iCAAiC,EAAE,mBAAmB;IACtD,uBAAuB,EAAE,iBAAiB;IAC1C,gCAAgC,EAAE,qBAAqB;IACvD,8BAA8B,EAAE,gBAAgB;IAChD,uBAAuB,EAAE,kBAAkB;IAC3C,0BAA0B,EAAE,kBAAkB;IAC9C,wBAAwB,EAAE,iBAAiB;IAC3C,4BAA4B,EAAE,kBAAkB;IAChD,0BAA0B,EAAE,gBAAgB;IAC5C,0BAA0B,EAAE,iBAAiB;IAC7C,gCAAgC,EAAE,mBAAmB;IACrD,yBAAyB,EAAE,gCAAgC;IAC3D,yBAAyB,EAAE,oBAAoB;IAC/C,mBAAmB,EAAE,eAAe;IACpC,yBAAyB,EAAE,eAAe;IAC1C,8BAA8B,EAAE,iBAAiB;IACjD,gCAAgC,EAAE,eAAe;IACjD,uBAAuB,EAAE,cAAc;IACvC,yBAAyB,EAAE,iBAAiB;IAC5C,mBAAmB,EAAE,aAAa;IAClC,mBAAmB,EAAE,kBAAkB;IACvC,sBAAsB,EAAE,gBAAgB;IACxC,sBAAsB,EAAE,cAAc;IACtC,oBAAoB,EAAE,aAAa;IACnC,uBAAuB,EAAE,eAAe;IACxC,qBAAqB,EAAE,cAAc;IACrC,qBAAqB,EAAE,eAAe;IACtC,yBAAyB,EAAE,gBAAgB;IAC3C,4BAA4B,EAAE,iBAAiB;IAC/C,qBAAqB,EAAE,YAAY;IACnC,qBAAqB,EAAE,YAAY;IACnC,8BAA8B,EAAE,oBAAoB;IACpD,2BAA2B,EAAE,kBAAkB;IAC/C,4BAA4B,EAAE,oBAAoB;IAClD,2BAA2B,EAAE,kBAAkB;IAC/C,KAAK,EAAE,KAAK;IACZ,4BAA4B,EAAE,KAAK;CACpC,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACtE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA+B;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC7D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
* No React, no Supabase, no product DB schemas — adapters live in each app.
|
|
6
6
|
*/
|
|
7
7
|
export type { AppleCalDavAuth, DiscoveredCalendar, FetchEventsRange, FloatingZoneOptions, ParsedCalendarEvent, } from "./types.js";
|
|
8
|
-
export { discoverPrimaryCalendar, fetchEvents, icalTimeToUtcIso, isCalDavCalendarCollection, luxonFromIcsToken, parseCalDavReport, parseIcs, parseIcsLuxonFallback, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./apple/index.js";
|
|
8
|
+
export { discoverPrimaryCalendar, fetchEvents, icalTimeToUtcIso, isCalDavCalendarCollection, isSharedInCalendar, luxonFromIcsToken, parseCalDavReport, parseIcs, parseIcsLuxonFallback, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./apple/index.js";
|
|
9
|
+
export { resolveZoneAlias, isResolvableZone, normalizeTzidKey } from "./apple/zones.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
* Shared CalDAV/ICS helpers for NTRR products.
|
|
5
5
|
* No React, no Supabase, no product DB schemas — adapters live in each app.
|
|
6
6
|
*/
|
|
7
|
-
export { discoverPrimaryCalendar, fetchEvents, icalTimeToUtcIso, isCalDavCalendarCollection, luxonFromIcsToken, parseCalDavReport, parseIcs, parseIcsLuxonFallback, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./apple/index.js";
|
|
7
|
+
export { discoverPrimaryCalendar, fetchEvents, icalTimeToUtcIso, isCalDavCalendarCollection, isSharedInCalendar, luxonFromIcsToken, parseCalDavReport, parseIcs, parseIcsLuxonFallback, pickPrimaryCalendarFromHomeXml, verifyAppleCalDavConnection, } from "./apple/index.js";
|
|
8
|
+
export { resolveZoneAlias, isResolvableZone, normalizeTzidKey } from "./apple/zones.js";
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|