@craftguild/jscalendar 0.5.5 → 0.6.0
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 +41 -1
- package/dist/index.cjs +71 -17
- package/dist/index.d.cts +15 -7
- package/dist/index.d.mts +15 -7
- package/dist/index.mjs +70 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,6 +27,30 @@ JSCalendar objects directly when your data already matches the spec.
|
|
|
27
27
|
pnpm add @craftguild/jscalendar
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
## Browser ESM Example
|
|
31
|
+
|
|
32
|
+
You can also load the library directly in the browser from `esm.sh`.
|
|
33
|
+
The repository includes a single-file example at
|
|
34
|
+
[`examples/browser/demo.html`](./examples/browser/demo.html) that demonstrates:
|
|
35
|
+
|
|
36
|
+
- toggling between `Event` and `Task`
|
|
37
|
+
- defining recurrence rules and expanding them within a date range
|
|
38
|
+
- converting the result to iCalendar text with `JsCal.toICal([...])`
|
|
39
|
+
|
|
40
|
+
```html
|
|
41
|
+
<script type="module">
|
|
42
|
+
import { JsCal } from "https://esm.sh/@craftguild/jscalendar@0.6.0?bundle";
|
|
43
|
+
|
|
44
|
+
const event = new JsCal.Event({
|
|
45
|
+
title: "Browser demo",
|
|
46
|
+
start: "2026-04-01T09:00:00",
|
|
47
|
+
duration: "PT1H",
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
console.log(JsCal.toICal([event]));
|
|
51
|
+
</script>
|
|
52
|
+
```
|
|
53
|
+
|
|
30
54
|
## Quick Start
|
|
31
55
|
|
|
32
56
|
```ts
|
|
@@ -52,6 +76,11 @@ const task = new JsCal.Task({
|
|
|
52
76
|
const from = new Date(2026, 0, 1, 0, 0, 0, 0);
|
|
53
77
|
const to = new Date(2026, 0, 31, 0, 0, 0, 0);
|
|
54
78
|
const generator = JsCal.expandRecurrence([event, task], { from, to });
|
|
79
|
+
const withoutAnchor = JsCal.expandRecurrence(
|
|
80
|
+
[event],
|
|
81
|
+
{ from, to },
|
|
82
|
+
{ includeAnchor: false },
|
|
83
|
+
);
|
|
55
84
|
|
|
56
85
|
for (const item of generator) {
|
|
57
86
|
// Expanded JSCalendar objects for events and tasks in the range.
|
|
@@ -344,7 +373,7 @@ const d1 = JsCal.duration.minutes(90); // PT1H30M
|
|
|
344
373
|
const d2 = JsCal.duration.from({ hours: 1, minutes: 15 }); // PT1H15M
|
|
345
374
|
|
|
346
375
|
const tz = JsCal.timeZone("asia/tokyo"); // => Asia/Tokyo
|
|
347
|
-
const tzList = JsCal.timeZones;
|
|
376
|
+
const tzList = JsCal.timeZones; // Includes regional zones plus supported Etc/GMT IDs.
|
|
348
377
|
```
|
|
349
378
|
|
|
350
379
|
## Recurrence Expansion
|
|
@@ -354,6 +383,9 @@ The recurrence expansion API is a generator.
|
|
|
354
383
|
Expansion follows RFC 8984 semantics for recurrence rules, including
|
|
355
384
|
overrides and exclusions. The output instances contain `recurrenceId`
|
|
356
385
|
and preserve the base object’s data unless a patch modifies fields.
|
|
386
|
+
By default, the source item’s anchor occurrence is included to preserve
|
|
387
|
+
backward compatibility. Pass `{ includeAnchor: false }` to exclude the
|
|
388
|
+
source anchor and return only rule-expanded occurrences.
|
|
357
389
|
|
|
358
390
|
```ts
|
|
359
391
|
for (const occ of JsCal.expandRecurrence([event], {
|
|
@@ -362,6 +394,14 @@ for (const occ of JsCal.expandRecurrence([event], {
|
|
|
362
394
|
})) {
|
|
363
395
|
console.log(occ);
|
|
364
396
|
}
|
|
397
|
+
|
|
398
|
+
for (const occ of JsCal.expandRecurrence(
|
|
399
|
+
[event],
|
|
400
|
+
{ from: new Date("2026-02-01"), to: new Date("2026-03-01") },
|
|
401
|
+
{ includeAnchor: false },
|
|
402
|
+
)) {
|
|
403
|
+
console.log(occ);
|
|
404
|
+
}
|
|
365
405
|
```
|
|
366
406
|
|
|
367
407
|
### Paged Expansion (for infinite scroll)
|
package/dist/index.cjs
CHANGED
|
@@ -1025,7 +1025,7 @@ function generateDateCandidates(periodStart, rule, firstDay, skip) {
|
|
|
1025
1025
|
return result;
|
|
1026
1026
|
}
|
|
1027
1027
|
if (rule.frequency === FREQ_WEEKLY) {
|
|
1028
|
-
let cursor = periodStart;
|
|
1028
|
+
let cursor = startOfWeek(periodStart, firstDay);
|
|
1029
1029
|
for (let i = 0; i < 7; i += 1) {
|
|
1030
1030
|
result.push({
|
|
1031
1031
|
year: cursor.year,
|
|
@@ -1259,10 +1259,12 @@ function expandRule(anchor, rule, fromLocal, toLocal, includeAnchor, timeZone, f
|
|
|
1259
1259
|
const results = [];
|
|
1260
1260
|
let generated = 0;
|
|
1261
1261
|
let cursor = start;
|
|
1262
|
+
const anchorValue = formatLocalDateTime(start);
|
|
1262
1263
|
while (generated < count) {
|
|
1263
1264
|
let filtered = generateDateTimes(cursor, normalized, firstDay, skip).sort();
|
|
1264
1265
|
if (normalized.bySetPosition && normalized.bySetPosition.length > 0) filtered = applyBySetPos(filtered, normalized.bySetPosition);
|
|
1265
1266
|
for (const dt of filtered) {
|
|
1267
|
+
if (compareDate(cursor, start) === 0 && dt < anchorValue) continue;
|
|
1266
1268
|
generated += 1;
|
|
1267
1269
|
if (generated > count) break;
|
|
1268
1270
|
if (until && dt > until) return results;
|
|
@@ -1282,14 +1284,17 @@ function expandRule(anchor, rule, fromLocal, toLocal, includeAnchor, timeZone, f
|
|
|
1282
1284
|
* Expand recurrence into occurrences sorted by recurrenceId/start.
|
|
1283
1285
|
* @param items JSCalendar objects to expand.
|
|
1284
1286
|
* @param range Date range bounds.
|
|
1287
|
+
* @param options Expansion options.
|
|
1285
1288
|
* @return Generator of expanded occurrences.
|
|
1286
1289
|
*/
|
|
1287
|
-
function* expandRecurrence(items, range) {
|
|
1290
|
+
function* expandRecurrence(items, range, options = {}) {
|
|
1291
|
+
var _options$includeAncho;
|
|
1288
1292
|
const occurrences = [];
|
|
1289
1293
|
let index = 0;
|
|
1294
|
+
const includeAnchor = (_options$includeAncho = options.includeAnchor) !== null && _options$includeAncho !== void 0 ? _options$includeAncho : true;
|
|
1290
1295
|
for (const item of items) {
|
|
1291
1296
|
if (item["@type"] === TYPE_EVENT$3) {
|
|
1292
|
-
for (const occurrence of expandEvent(item, range)) {
|
|
1297
|
+
for (const occurrence of expandEvent(item, range, includeAnchor)) {
|
|
1293
1298
|
occurrences.push({
|
|
1294
1299
|
value: occurrence,
|
|
1295
1300
|
key: occurrenceKey(occurrence),
|
|
@@ -1300,7 +1305,7 @@ function* expandRecurrence(items, range) {
|
|
|
1300
1305
|
continue;
|
|
1301
1306
|
}
|
|
1302
1307
|
if (item["@type"] === TYPE_TASK$3) {
|
|
1303
|
-
for (const occurrence of expandTask(item, range)) {
|
|
1308
|
+
for (const occurrence of expandTask(item, range, includeAnchor)) {
|
|
1304
1309
|
occurrences.push({
|
|
1305
1310
|
value: occurrence,
|
|
1306
1311
|
key: occurrenceKey(occurrence),
|
|
@@ -1335,7 +1340,7 @@ function* expandRecurrence(items, range) {
|
|
|
1335
1340
|
function expandRecurrencePaged(items, range, options) {
|
|
1336
1341
|
const result = [];
|
|
1337
1342
|
let nextCursor;
|
|
1338
|
-
for (const occurrence of expandRecurrence(items, range)) {
|
|
1343
|
+
for (const occurrence of expandRecurrence(items, range, options)) {
|
|
1339
1344
|
const key = occurrenceKey(occurrence);
|
|
1340
1345
|
if (options.cursor && key) {
|
|
1341
1346
|
if (key <= options.cursor) continue;
|
|
@@ -1353,23 +1358,25 @@ function expandRecurrencePaged(items, range, options) {
|
|
|
1353
1358
|
* Expand event into occurrences.
|
|
1354
1359
|
* @param event Event to expand.
|
|
1355
1360
|
* @param range Date range bounds.
|
|
1361
|
+
* @param includeAnchor Whether the source event should be included.
|
|
1356
1362
|
* @return Generator of expanded occurrences.
|
|
1357
1363
|
*/
|
|
1358
|
-
function expandEvent(event, range) {
|
|
1364
|
+
function expandEvent(event, range, includeAnchor) {
|
|
1359
1365
|
var _event$timeZone;
|
|
1360
|
-
return expandObject(event, range, event.start, event.recurrenceRules, event.excludedRecurrenceRules, event.recurrenceOverrides, (_event$timeZone = event.timeZone) !== null && _event$timeZone !== void 0 ? _event$timeZone : null);
|
|
1366
|
+
return expandObject(event, range, event.start, event.recurrenceRules, event.excludedRecurrenceRules, event.recurrenceOverrides, (_event$timeZone = event.timeZone) !== null && _event$timeZone !== void 0 ? _event$timeZone : null, includeAnchor);
|
|
1361
1367
|
}
|
|
1362
1368
|
/**
|
|
1363
1369
|
* Expand task into occurrences.
|
|
1364
1370
|
* @param task Task to expand.
|
|
1365
1371
|
* @param range Date range bounds.
|
|
1372
|
+
* @param includeAnchor Whether the source task should be included.
|
|
1366
1373
|
* @return Generator of expanded occurrences.
|
|
1367
1374
|
*/
|
|
1368
|
-
function expandTask(task, range) {
|
|
1375
|
+
function expandTask(task, range, includeAnchor) {
|
|
1369
1376
|
var _task$start, _task$timeZone;
|
|
1370
1377
|
const anchor = (_task$start = task.start) !== null && _task$start !== void 0 ? _task$start : task.due;
|
|
1371
1378
|
if (!anchor) return (function* empty() {})();
|
|
1372
|
-
return expandObject(task, range, anchor, task.recurrenceRules, task.excludedRecurrenceRules, task.recurrenceOverrides, (_task$timeZone = task.timeZone) !== null && _task$timeZone !== void 0 ? _task$timeZone : null);
|
|
1379
|
+
return expandObject(task, range, anchor, task.recurrenceRules, task.excludedRecurrenceRules, task.recurrenceOverrides, (_task$timeZone = task.timeZone) !== null && _task$timeZone !== void 0 ? _task$timeZone : null, includeAnchor);
|
|
1373
1380
|
}
|
|
1374
1381
|
/**
|
|
1375
1382
|
* Build a stable ordering key for an occurrence.
|
|
@@ -1391,9 +1398,10 @@ function occurrenceKey(value) {
|
|
|
1391
1398
|
* @param excludedRules Exclusion recurrence rules.
|
|
1392
1399
|
* @param overrides Recurrence overrides keyed by LocalDateTime.
|
|
1393
1400
|
* @param recurrenceIdTimeZone Optional time zone for recurrence IDs.
|
|
1401
|
+
* @param includeAnchor Whether the source item should be included.
|
|
1394
1402
|
* @return Generator of expanded occurrences.
|
|
1395
1403
|
*/
|
|
1396
|
-
function* expandObject(base, range, anchor, rules, excludedRules, overrides, recurrenceIdTimeZone) {
|
|
1404
|
+
function* expandObject(base, range, anchor, rules, excludedRules, overrides, recurrenceIdTimeZone, includeAnchor = true) {
|
|
1397
1405
|
var _rules$;
|
|
1398
1406
|
const hasZone = Boolean(recurrenceIdTimeZone);
|
|
1399
1407
|
const fromLocal = hasZone && recurrenceIdTimeZone ? dateTimeInTimeZone(range.from, recurrenceIdTimeZone) : localDateTimeFromDate(range.from);
|
|
@@ -1402,9 +1410,11 @@ function* expandObject(base, range, anchor, rules, excludedRules, overrides, rec
|
|
|
1402
1410
|
const toDate = range.to;
|
|
1403
1411
|
const overrideKeys = overrides ? Object.keys(overrides) : [];
|
|
1404
1412
|
if (!rules || rules.length === 0) {
|
|
1405
|
-
if (
|
|
1406
|
-
if (
|
|
1407
|
-
|
|
1413
|
+
if (includeAnchor) {
|
|
1414
|
+
if (hasZone && recurrenceIdTimeZone) {
|
|
1415
|
+
if (isInRangeWithZone(anchor, fromDate, toDate, recurrenceIdTimeZone)) yield base;
|
|
1416
|
+
} else if (isInRange(anchor, fromLocal, toLocal)) yield base;
|
|
1417
|
+
}
|
|
1408
1418
|
for (const key of overrideKeys) {
|
|
1409
1419
|
const instance = buildInstance(base, key, recurrenceIdTimeZone, overrides ? overrides[key] : void 0);
|
|
1410
1420
|
if (!instance) continue;
|
|
@@ -1424,11 +1434,12 @@ function* expandObject(base, range, anchor, rules, excludedRules, overrides, rec
|
|
|
1424
1434
|
const expanded = expandRule(anchor, rule, fromLocal, toLocal, true, recurrenceIdTimeZone !== null && recurrenceIdTimeZone !== void 0 ? recurrenceIdTimeZone : void 0, fromDate, toDate);
|
|
1425
1435
|
for (const value of expanded) excluded.add(value);
|
|
1426
1436
|
}
|
|
1427
|
-
if (!occurrences.includes(anchor)) occurrences.push(anchor);
|
|
1437
|
+
if (includeAnchor && !occurrences.includes(anchor)) occurrences.push(anchor);
|
|
1428
1438
|
for (const key of overrideKeys) if (!occurrences.includes(key)) occurrences.push(key);
|
|
1429
1439
|
let sorted = Array.from(new Set(occurrences)).sort((a, b) => compareLocal(a, b, recurrenceIdTimeZone !== null && recurrenceIdTimeZone !== void 0 ? recurrenceIdTimeZone : void 0));
|
|
1430
1440
|
if (((_rules$ = rules[0]) === null || _rules$ === void 0 ? void 0 : _rules$.count) && sorted.length > rules[0].count) sorted = sorted.slice(0, rules[0].count);
|
|
1431
1441
|
for (const dt of sorted) {
|
|
1442
|
+
if (!includeAnchor && dt === anchor) continue;
|
|
1432
1443
|
if (excluded.has(dt)) continue;
|
|
1433
1444
|
const instance = buildInstance(base, dt, recurrenceIdTimeZone, overrides ? overrides[dt] : void 0);
|
|
1434
1445
|
if (!instance) continue;
|
|
@@ -1796,7 +1807,7 @@ function getGroupRangeAsDates(group) {
|
|
|
1796
1807
|
|
|
1797
1808
|
//#endregion
|
|
1798
1809
|
//#region src/timezones.ts
|
|
1799
|
-
const
|
|
1810
|
+
const RegionalTimeZones = [
|
|
1800
1811
|
"Africa/Abidjan",
|
|
1801
1812
|
"Africa/Accra",
|
|
1802
1813
|
"Africa/Addis_Ababa",
|
|
@@ -2222,6 +2233,49 @@ const TimeZones = [
|
|
|
2222
2233
|
"Pacific/Wake",
|
|
2223
2234
|
"Pacific/Wallis"
|
|
2224
2235
|
];
|
|
2236
|
+
const EtcTimeZones = [
|
|
2237
|
+
"Etc/GMT",
|
|
2238
|
+
"Etc/GMT+0",
|
|
2239
|
+
"Etc/GMT+1",
|
|
2240
|
+
"Etc/GMT+10",
|
|
2241
|
+
"Etc/GMT+11",
|
|
2242
|
+
"Etc/GMT+12",
|
|
2243
|
+
"Etc/GMT+2",
|
|
2244
|
+
"Etc/GMT+3",
|
|
2245
|
+
"Etc/GMT+4",
|
|
2246
|
+
"Etc/GMT+5",
|
|
2247
|
+
"Etc/GMT+6",
|
|
2248
|
+
"Etc/GMT+7",
|
|
2249
|
+
"Etc/GMT+8",
|
|
2250
|
+
"Etc/GMT+9",
|
|
2251
|
+
"Etc/GMT-0",
|
|
2252
|
+
"Etc/GMT-1",
|
|
2253
|
+
"Etc/GMT-10",
|
|
2254
|
+
"Etc/GMT-11",
|
|
2255
|
+
"Etc/GMT-12",
|
|
2256
|
+
"Etc/GMT-13",
|
|
2257
|
+
"Etc/GMT-14",
|
|
2258
|
+
"Etc/GMT-2",
|
|
2259
|
+
"Etc/GMT-3",
|
|
2260
|
+
"Etc/GMT-4",
|
|
2261
|
+
"Etc/GMT-5",
|
|
2262
|
+
"Etc/GMT-6",
|
|
2263
|
+
"Etc/GMT-7",
|
|
2264
|
+
"Etc/GMT-8",
|
|
2265
|
+
"Etc/GMT-9",
|
|
2266
|
+
"Etc/GMT0",
|
|
2267
|
+
"Etc/Greenwich",
|
|
2268
|
+
"Etc/UCT",
|
|
2269
|
+
"Etc/Universal",
|
|
2270
|
+
"Etc/UTC",
|
|
2271
|
+
"Etc/Zulu"
|
|
2272
|
+
];
|
|
2273
|
+
const GmtTimeZones = ["GMT"];
|
|
2274
|
+
const TimeZones = [
|
|
2275
|
+
...RegionalTimeZones,
|
|
2276
|
+
...EtcTimeZones,
|
|
2277
|
+
...GmtTimeZones
|
|
2278
|
+
];
|
|
2225
2279
|
/**
|
|
2226
2280
|
* Build a lowercase lookup map for time zones.
|
|
2227
2281
|
* @param zones List of time zone IDs.
|
|
@@ -3907,8 +3961,8 @@ const JsCal = {
|
|
|
3907
3961
|
filterByDateRange(items, range, options) {
|
|
3908
3962
|
return filterByDateRange(normalizeItems(items), range, options);
|
|
3909
3963
|
},
|
|
3910
|
-
expandRecurrence(items, range) {
|
|
3911
|
-
return expandRecurrence(normalizeItems(items), range);
|
|
3964
|
+
expandRecurrence(items, range, options) {
|
|
3965
|
+
return expandRecurrence(normalizeItems(items), range, options);
|
|
3912
3966
|
},
|
|
3913
3967
|
expandRecurrencePaged(items, range, options) {
|
|
3914
3968
|
return expandRecurrencePaged(normalizeItems(items), range, options);
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/timezones.d.ts
|
|
2
|
-
|
|
2
|
+
declare const TimeZones: readonly ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/Universal", "Etc/UTC", "Etc/Zulu", "GMT"];
|
|
3
|
+
type TimeZoneId = (typeof TimeZones)[number];
|
|
3
4
|
type TimeZoneInput = TimeZoneId | Lowercase<TimeZoneId>;
|
|
4
5
|
/**
|
|
5
6
|
* Resolve a time zone input to its canonical ID.
|
|
@@ -262,6 +263,15 @@ type DateRangeOptions = {
|
|
|
262
263
|
includeIncomparable?: boolean;
|
|
263
264
|
};
|
|
264
265
|
//#endregion
|
|
266
|
+
//#region src/recurrence/types.d.ts
|
|
267
|
+
type RecurrenceExpandOptions = {
|
|
268
|
+
includeAnchor?: boolean;
|
|
269
|
+
};
|
|
270
|
+
type RecurrencePageOptions = RecurrenceExpandOptions & {
|
|
271
|
+
limit: number;
|
|
272
|
+
cursor?: string;
|
|
273
|
+
};
|
|
274
|
+
//#endregion
|
|
265
275
|
//#region src/ical.d.ts
|
|
266
276
|
type ICalOptions = {
|
|
267
277
|
prodId?: string;
|
|
@@ -673,7 +683,7 @@ declare const JsCal: {
|
|
|
673
683
|
}): string;
|
|
674
684
|
};
|
|
675
685
|
timeZone: typeof resolveTimeZone;
|
|
676
|
-
timeZones:
|
|
686
|
+
timeZones: readonly ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/Universal", "Etc/UTC", "Etc/Zulu", "GMT"];
|
|
677
687
|
applyPatch: typeof applyPatch;
|
|
678
688
|
Participant: typeof buildParticipant;
|
|
679
689
|
Location: typeof buildLocation;
|
|
@@ -747,6 +757,7 @@ declare const JsCal: {
|
|
|
747
757
|
* Expand recurrence rules into concrete occurrences.
|
|
748
758
|
* @param items JSCalendar objects or JsCal instances.
|
|
749
759
|
* @param range Date range bounds.
|
|
760
|
+
* @param options Expansion options.
|
|
750
761
|
* @return Generator of expanded JSCalendar objects.
|
|
751
762
|
*/
|
|
752
763
|
expandRecurrence(items: Array<JSCalendarObject | {
|
|
@@ -754,7 +765,7 @@ declare const JsCal: {
|
|
|
754
765
|
}>, range: {
|
|
755
766
|
from: Date;
|
|
756
767
|
to: Date;
|
|
757
|
-
}): Generator<JSCalendarObject>;
|
|
768
|
+
}, options?: RecurrenceExpandOptions): Generator<JSCalendarObject>;
|
|
758
769
|
/**
|
|
759
770
|
* Expand recurrence rules with pagination support.
|
|
760
771
|
* @param items JSCalendar objects or JsCal instances.
|
|
@@ -767,10 +778,7 @@ declare const JsCal: {
|
|
|
767
778
|
}>, range: {
|
|
768
779
|
from: Date;
|
|
769
780
|
to: Date;
|
|
770
|
-
}, options: {
|
|
771
|
-
limit: number;
|
|
772
|
-
cursor?: string | undefined;
|
|
773
|
-
}): {
|
|
781
|
+
}, options: RecurrencePageOptions): {
|
|
774
782
|
items: JSCalendarObject[];
|
|
775
783
|
nextCursor?: string;
|
|
776
784
|
};
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/timezones.d.ts
|
|
2
|
-
|
|
2
|
+
declare const TimeZones: readonly ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/Universal", "Etc/UTC", "Etc/Zulu", "GMT"];
|
|
3
|
+
type TimeZoneId = (typeof TimeZones)[number];
|
|
3
4
|
type TimeZoneInput = TimeZoneId | Lowercase<TimeZoneId>;
|
|
4
5
|
/**
|
|
5
6
|
* Resolve a time zone input to its canonical ID.
|
|
@@ -262,6 +263,15 @@ type DateRangeOptions = {
|
|
|
262
263
|
includeIncomparable?: boolean;
|
|
263
264
|
};
|
|
264
265
|
//#endregion
|
|
266
|
+
//#region src/recurrence/types.d.ts
|
|
267
|
+
type RecurrenceExpandOptions = {
|
|
268
|
+
includeAnchor?: boolean;
|
|
269
|
+
};
|
|
270
|
+
type RecurrencePageOptions = RecurrenceExpandOptions & {
|
|
271
|
+
limit: number;
|
|
272
|
+
cursor?: string;
|
|
273
|
+
};
|
|
274
|
+
//#endregion
|
|
265
275
|
//#region src/ical.d.ts
|
|
266
276
|
type ICalOptions = {
|
|
267
277
|
prodId?: string;
|
|
@@ -673,7 +683,7 @@ declare const JsCal: {
|
|
|
673
683
|
}): string;
|
|
674
684
|
};
|
|
675
685
|
timeZone: typeof resolveTimeZone;
|
|
676
|
-
timeZones:
|
|
686
|
+
timeZones: readonly ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/Universal", "Etc/UTC", "Etc/Zulu", "GMT"];
|
|
677
687
|
applyPatch: typeof applyPatch;
|
|
678
688
|
Participant: typeof buildParticipant;
|
|
679
689
|
Location: typeof buildLocation;
|
|
@@ -747,6 +757,7 @@ declare const JsCal: {
|
|
|
747
757
|
* Expand recurrence rules into concrete occurrences.
|
|
748
758
|
* @param items JSCalendar objects or JsCal instances.
|
|
749
759
|
* @param range Date range bounds.
|
|
760
|
+
* @param options Expansion options.
|
|
750
761
|
* @return Generator of expanded JSCalendar objects.
|
|
751
762
|
*/
|
|
752
763
|
expandRecurrence(items: Array<JSCalendarObject | {
|
|
@@ -754,7 +765,7 @@ declare const JsCal: {
|
|
|
754
765
|
}>, range: {
|
|
755
766
|
from: Date;
|
|
756
767
|
to: Date;
|
|
757
|
-
}): Generator<JSCalendarObject>;
|
|
768
|
+
}, options?: RecurrenceExpandOptions): Generator<JSCalendarObject>;
|
|
758
769
|
/**
|
|
759
770
|
* Expand recurrence rules with pagination support.
|
|
760
771
|
* @param items JSCalendar objects or JsCal instances.
|
|
@@ -767,10 +778,7 @@ declare const JsCal: {
|
|
|
767
778
|
}>, range: {
|
|
768
779
|
from: Date;
|
|
769
780
|
to: Date;
|
|
770
|
-
}, options: {
|
|
771
|
-
limit: number;
|
|
772
|
-
cursor?: string | undefined;
|
|
773
|
-
}): {
|
|
781
|
+
}, options: RecurrencePageOptions): {
|
|
774
782
|
items: JSCalendarObject[];
|
|
775
783
|
nextCursor?: string;
|
|
776
784
|
};
|
package/dist/index.mjs
CHANGED
|
@@ -1019,7 +1019,7 @@ function generateDateCandidates(periodStart, rule, firstDay, skip) {
|
|
|
1019
1019
|
return result;
|
|
1020
1020
|
}
|
|
1021
1021
|
if (rule.frequency === FREQ_WEEKLY) {
|
|
1022
|
-
let cursor = periodStart;
|
|
1022
|
+
let cursor = startOfWeek(periodStart, firstDay);
|
|
1023
1023
|
for (let i = 0; i < 7; i += 1) {
|
|
1024
1024
|
result.push({
|
|
1025
1025
|
year: cursor.year,
|
|
@@ -1252,10 +1252,12 @@ function expandRule(anchor, rule, fromLocal, toLocal, includeAnchor, timeZone, f
|
|
|
1252
1252
|
const results = [];
|
|
1253
1253
|
let generated = 0;
|
|
1254
1254
|
let cursor = start;
|
|
1255
|
+
const anchorValue = formatLocalDateTime(start);
|
|
1255
1256
|
while (generated < count) {
|
|
1256
1257
|
let filtered = generateDateTimes(cursor, normalized, firstDay, skip).sort();
|
|
1257
1258
|
if (normalized.bySetPosition && normalized.bySetPosition.length > 0) filtered = applyBySetPos(filtered, normalized.bySetPosition);
|
|
1258
1259
|
for (const dt of filtered) {
|
|
1260
|
+
if (compareDate(cursor, start) === 0 && dt < anchorValue) continue;
|
|
1259
1261
|
generated += 1;
|
|
1260
1262
|
if (generated > count) break;
|
|
1261
1263
|
if (until && dt > until) return results;
|
|
@@ -1275,14 +1277,16 @@ function expandRule(anchor, rule, fromLocal, toLocal, includeAnchor, timeZone, f
|
|
|
1275
1277
|
* Expand recurrence into occurrences sorted by recurrenceId/start.
|
|
1276
1278
|
* @param items JSCalendar objects to expand.
|
|
1277
1279
|
* @param range Date range bounds.
|
|
1280
|
+
* @param options Expansion options.
|
|
1278
1281
|
* @return Generator of expanded occurrences.
|
|
1279
1282
|
*/
|
|
1280
|
-
function* expandRecurrence(items, range) {
|
|
1283
|
+
function* expandRecurrence(items, range, options = {}) {
|
|
1281
1284
|
const occurrences = [];
|
|
1282
1285
|
let index = 0;
|
|
1286
|
+
const includeAnchor = options.includeAnchor ?? true;
|
|
1283
1287
|
for (const item of items) {
|
|
1284
1288
|
if (item["@type"] === TYPE_EVENT$3) {
|
|
1285
|
-
for (const occurrence of expandEvent(item, range)) {
|
|
1289
|
+
for (const occurrence of expandEvent(item, range, includeAnchor)) {
|
|
1286
1290
|
occurrences.push({
|
|
1287
1291
|
value: occurrence,
|
|
1288
1292
|
key: occurrenceKey(occurrence),
|
|
@@ -1293,7 +1297,7 @@ function* expandRecurrence(items, range) {
|
|
|
1293
1297
|
continue;
|
|
1294
1298
|
}
|
|
1295
1299
|
if (item["@type"] === TYPE_TASK$3) {
|
|
1296
|
-
for (const occurrence of expandTask(item, range)) {
|
|
1300
|
+
for (const occurrence of expandTask(item, range, includeAnchor)) {
|
|
1297
1301
|
occurrences.push({
|
|
1298
1302
|
value: occurrence,
|
|
1299
1303
|
key: occurrenceKey(occurrence),
|
|
@@ -1328,7 +1332,7 @@ function* expandRecurrence(items, range) {
|
|
|
1328
1332
|
function expandRecurrencePaged(items, range, options) {
|
|
1329
1333
|
const result = [];
|
|
1330
1334
|
let nextCursor;
|
|
1331
|
-
for (const occurrence of expandRecurrence(items, range)) {
|
|
1335
|
+
for (const occurrence of expandRecurrence(items, range, options)) {
|
|
1332
1336
|
const key = occurrenceKey(occurrence);
|
|
1333
1337
|
if (options.cursor && key) {
|
|
1334
1338
|
if (key <= options.cursor) continue;
|
|
@@ -1346,21 +1350,23 @@ function expandRecurrencePaged(items, range, options) {
|
|
|
1346
1350
|
* Expand event into occurrences.
|
|
1347
1351
|
* @param event Event to expand.
|
|
1348
1352
|
* @param range Date range bounds.
|
|
1353
|
+
* @param includeAnchor Whether the source event should be included.
|
|
1349
1354
|
* @return Generator of expanded occurrences.
|
|
1350
1355
|
*/
|
|
1351
|
-
function expandEvent(event, range) {
|
|
1352
|
-
return expandObject(event, range, event.start, event.recurrenceRules, event.excludedRecurrenceRules, event.recurrenceOverrides, event.timeZone ?? null);
|
|
1356
|
+
function expandEvent(event, range, includeAnchor) {
|
|
1357
|
+
return expandObject(event, range, event.start, event.recurrenceRules, event.excludedRecurrenceRules, event.recurrenceOverrides, event.timeZone ?? null, includeAnchor);
|
|
1353
1358
|
}
|
|
1354
1359
|
/**
|
|
1355
1360
|
* Expand task into occurrences.
|
|
1356
1361
|
* @param task Task to expand.
|
|
1357
1362
|
* @param range Date range bounds.
|
|
1363
|
+
* @param includeAnchor Whether the source task should be included.
|
|
1358
1364
|
* @return Generator of expanded occurrences.
|
|
1359
1365
|
*/
|
|
1360
|
-
function expandTask(task, range) {
|
|
1366
|
+
function expandTask(task, range, includeAnchor) {
|
|
1361
1367
|
const anchor = task.start ?? task.due;
|
|
1362
1368
|
if (!anchor) return (function* empty() {})();
|
|
1363
|
-
return expandObject(task, range, anchor, task.recurrenceRules, task.excludedRecurrenceRules, task.recurrenceOverrides, task.timeZone ?? null);
|
|
1369
|
+
return expandObject(task, range, anchor, task.recurrenceRules, task.excludedRecurrenceRules, task.recurrenceOverrides, task.timeZone ?? null, includeAnchor);
|
|
1364
1370
|
}
|
|
1365
1371
|
/**
|
|
1366
1372
|
* Build a stable ordering key for an occurrence.
|
|
@@ -1381,9 +1387,10 @@ function occurrenceKey(value) {
|
|
|
1381
1387
|
* @param excludedRules Exclusion recurrence rules.
|
|
1382
1388
|
* @param overrides Recurrence overrides keyed by LocalDateTime.
|
|
1383
1389
|
* @param recurrenceIdTimeZone Optional time zone for recurrence IDs.
|
|
1390
|
+
* @param includeAnchor Whether the source item should be included.
|
|
1384
1391
|
* @return Generator of expanded occurrences.
|
|
1385
1392
|
*/
|
|
1386
|
-
function* expandObject(base, range, anchor, rules, excludedRules, overrides, recurrenceIdTimeZone) {
|
|
1393
|
+
function* expandObject(base, range, anchor, rules, excludedRules, overrides, recurrenceIdTimeZone, includeAnchor = true) {
|
|
1387
1394
|
const hasZone = Boolean(recurrenceIdTimeZone);
|
|
1388
1395
|
const fromLocal = hasZone && recurrenceIdTimeZone ? dateTimeInTimeZone(range.from, recurrenceIdTimeZone) : localDateTimeFromDate(range.from);
|
|
1389
1396
|
const toLocal = hasZone && recurrenceIdTimeZone ? dateTimeInTimeZone(range.to, recurrenceIdTimeZone) : localDateTimeFromDate(range.to);
|
|
@@ -1391,9 +1398,11 @@ function* expandObject(base, range, anchor, rules, excludedRules, overrides, rec
|
|
|
1391
1398
|
const toDate = range.to;
|
|
1392
1399
|
const overrideKeys = overrides ? Object.keys(overrides) : [];
|
|
1393
1400
|
if (!rules || rules.length === 0) {
|
|
1394
|
-
if (
|
|
1395
|
-
if (
|
|
1396
|
-
|
|
1401
|
+
if (includeAnchor) {
|
|
1402
|
+
if (hasZone && recurrenceIdTimeZone) {
|
|
1403
|
+
if (isInRangeWithZone(anchor, fromDate, toDate, recurrenceIdTimeZone)) yield base;
|
|
1404
|
+
} else if (isInRange(anchor, fromLocal, toLocal)) yield base;
|
|
1405
|
+
}
|
|
1397
1406
|
for (const key of overrideKeys) {
|
|
1398
1407
|
const instance = buildInstance(base, key, recurrenceIdTimeZone, overrides ? overrides[key] : void 0);
|
|
1399
1408
|
if (!instance) continue;
|
|
@@ -1413,11 +1422,12 @@ function* expandObject(base, range, anchor, rules, excludedRules, overrides, rec
|
|
|
1413
1422
|
const expanded = expandRule(anchor, rule, fromLocal, toLocal, true, recurrenceIdTimeZone ?? void 0, fromDate, toDate);
|
|
1414
1423
|
for (const value of expanded) excluded.add(value);
|
|
1415
1424
|
}
|
|
1416
|
-
if (!occurrences.includes(anchor)) occurrences.push(anchor);
|
|
1425
|
+
if (includeAnchor && !occurrences.includes(anchor)) occurrences.push(anchor);
|
|
1417
1426
|
for (const key of overrideKeys) if (!occurrences.includes(key)) occurrences.push(key);
|
|
1418
1427
|
let sorted = Array.from(new Set(occurrences)).sort((a, b) => compareLocal(a, b, recurrenceIdTimeZone ?? void 0));
|
|
1419
1428
|
if (rules[0]?.count && sorted.length > rules[0].count) sorted = sorted.slice(0, rules[0].count);
|
|
1420
1429
|
for (const dt of sorted) {
|
|
1430
|
+
if (!includeAnchor && dt === anchor) continue;
|
|
1421
1431
|
if (excluded.has(dt)) continue;
|
|
1422
1432
|
const instance = buildInstance(base, dt, recurrenceIdTimeZone, overrides ? overrides[dt] : void 0);
|
|
1423
1433
|
if (!instance) continue;
|
|
@@ -1773,7 +1783,7 @@ function getGroupRangeAsDates(group) {
|
|
|
1773
1783
|
|
|
1774
1784
|
//#endregion
|
|
1775
1785
|
//#region src/timezones.ts
|
|
1776
|
-
const
|
|
1786
|
+
const RegionalTimeZones = [
|
|
1777
1787
|
"Africa/Abidjan",
|
|
1778
1788
|
"Africa/Accra",
|
|
1779
1789
|
"Africa/Addis_Ababa",
|
|
@@ -2199,6 +2209,49 @@ const TimeZones = [
|
|
|
2199
2209
|
"Pacific/Wake",
|
|
2200
2210
|
"Pacific/Wallis"
|
|
2201
2211
|
];
|
|
2212
|
+
const EtcTimeZones = [
|
|
2213
|
+
"Etc/GMT",
|
|
2214
|
+
"Etc/GMT+0",
|
|
2215
|
+
"Etc/GMT+1",
|
|
2216
|
+
"Etc/GMT+10",
|
|
2217
|
+
"Etc/GMT+11",
|
|
2218
|
+
"Etc/GMT+12",
|
|
2219
|
+
"Etc/GMT+2",
|
|
2220
|
+
"Etc/GMT+3",
|
|
2221
|
+
"Etc/GMT+4",
|
|
2222
|
+
"Etc/GMT+5",
|
|
2223
|
+
"Etc/GMT+6",
|
|
2224
|
+
"Etc/GMT+7",
|
|
2225
|
+
"Etc/GMT+8",
|
|
2226
|
+
"Etc/GMT+9",
|
|
2227
|
+
"Etc/GMT-0",
|
|
2228
|
+
"Etc/GMT-1",
|
|
2229
|
+
"Etc/GMT-10",
|
|
2230
|
+
"Etc/GMT-11",
|
|
2231
|
+
"Etc/GMT-12",
|
|
2232
|
+
"Etc/GMT-13",
|
|
2233
|
+
"Etc/GMT-14",
|
|
2234
|
+
"Etc/GMT-2",
|
|
2235
|
+
"Etc/GMT-3",
|
|
2236
|
+
"Etc/GMT-4",
|
|
2237
|
+
"Etc/GMT-5",
|
|
2238
|
+
"Etc/GMT-6",
|
|
2239
|
+
"Etc/GMT-7",
|
|
2240
|
+
"Etc/GMT-8",
|
|
2241
|
+
"Etc/GMT-9",
|
|
2242
|
+
"Etc/GMT0",
|
|
2243
|
+
"Etc/Greenwich",
|
|
2244
|
+
"Etc/UCT",
|
|
2245
|
+
"Etc/Universal",
|
|
2246
|
+
"Etc/UTC",
|
|
2247
|
+
"Etc/Zulu"
|
|
2248
|
+
];
|
|
2249
|
+
const GmtTimeZones = ["GMT"];
|
|
2250
|
+
const TimeZones = [
|
|
2251
|
+
...RegionalTimeZones,
|
|
2252
|
+
...EtcTimeZones,
|
|
2253
|
+
...GmtTimeZones
|
|
2254
|
+
];
|
|
2202
2255
|
/**
|
|
2203
2256
|
* Build a lowercase lookup map for time zones.
|
|
2204
2257
|
* @param zones List of time zone IDs.
|
|
@@ -3912,8 +3965,8 @@ const JsCal = {
|
|
|
3912
3965
|
filterByDateRange(items, range, options) {
|
|
3913
3966
|
return filterByDateRange(normalizeItems(items), range, options);
|
|
3914
3967
|
},
|
|
3915
|
-
expandRecurrence(items, range) {
|
|
3916
|
-
return expandRecurrence(normalizeItems(items), range);
|
|
3968
|
+
expandRecurrence(items, range, options) {
|
|
3969
|
+
return expandRecurrence(normalizeItems(items), range, options);
|
|
3917
3970
|
},
|
|
3918
3971
|
expandRecurrencePaged(items, range, options) {
|
|
3919
3972
|
return expandRecurrencePaged(normalizeItems(items), range, options);
|