@craftguild/jscalendar 0.2.0 → 0.3.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.
Files changed (99) hide show
  1. package/README.md +63 -0
  2. package/dist/__tests__/builders.test.d.ts +1 -0
  3. package/dist/__tests__/builders.test.js +82 -0
  4. package/dist/__tests__/calendar-extra.test.js +36 -0
  5. package/dist/__tests__/recurrence.test.js +123 -0
  6. package/dist/__tests__/search.test.js +27 -0
  7. package/dist/__tests__/utils.test.js +3 -0
  8. package/dist/__tests__/validation.test.js +113 -0
  9. package/dist/ical.d.ts +6 -0
  10. package/dist/ical.js +71 -3
  11. package/dist/jscal/base.d.ts +90 -0
  12. package/dist/jscal/base.js +181 -0
  13. package/dist/jscal/builders.d.ts +135 -0
  14. package/dist/jscal/builders.js +220 -0
  15. package/dist/jscal/constants.d.ts +11 -0
  16. package/dist/jscal/constants.js +11 -0
  17. package/dist/jscal/datetime.d.ts +14 -0
  18. package/dist/jscal/datetime.js +42 -0
  19. package/dist/jscal/defaults.d.ts +31 -0
  20. package/dist/jscal/defaults.js +102 -0
  21. package/dist/jscal/duration.d.ts +43 -0
  22. package/dist/jscal/duration.js +72 -0
  23. package/dist/jscal/event.d.ts +17 -0
  24. package/dist/jscal/event.js +71 -0
  25. package/dist/jscal/group.d.ts +25 -0
  26. package/dist/jscal/group.js +62 -0
  27. package/dist/jscal/guards.d.ts +19 -0
  28. package/dist/jscal/guards.js +25 -0
  29. package/dist/jscal/ids.d.ts +11 -0
  30. package/dist/jscal/ids.js +77 -0
  31. package/dist/jscal/normalize.d.ts +32 -0
  32. package/dist/jscal/normalize.js +45 -0
  33. package/dist/jscal/task.d.ts +17 -0
  34. package/dist/jscal/task.js +60 -0
  35. package/dist/jscal/types.d.ts +38 -0
  36. package/dist/jscal/types.js +1 -0
  37. package/dist/jscal.d.ts +77 -70
  38. package/dist/jscal.js +77 -465
  39. package/dist/patch.d.ts +13 -0
  40. package/dist/patch.js +166 -41
  41. package/dist/recurrence/constants.d.ts +13 -0
  42. package/dist/recurrence/constants.js +13 -0
  43. package/dist/recurrence/date-utils.d.ts +125 -0
  44. package/dist/recurrence/date-utils.js +259 -0
  45. package/dist/recurrence/expand.d.ts +23 -0
  46. package/dist/recurrence/expand.js +294 -0
  47. package/dist/recurrence/rule-candidates.d.ts +21 -0
  48. package/dist/recurrence/rule-candidates.js +120 -0
  49. package/dist/recurrence/rule-generate.d.ts +11 -0
  50. package/dist/recurrence/rule-generate.js +36 -0
  51. package/dist/recurrence/rule-matchers.d.ts +34 -0
  52. package/dist/recurrence/rule-matchers.js +120 -0
  53. package/dist/recurrence/rule-normalize.d.ts +9 -0
  54. package/dist/recurrence/rule-normalize.js +57 -0
  55. package/dist/recurrence/rule-selectors.d.ts +7 -0
  56. package/dist/recurrence/rule-selectors.js +21 -0
  57. package/dist/recurrence/rules.d.ts +14 -0
  58. package/dist/recurrence/rules.js +57 -0
  59. package/dist/recurrence/types.d.ts +27 -0
  60. package/dist/recurrence/types.js +1 -0
  61. package/dist/recurrence.d.ts +2 -15
  62. package/dist/recurrence.js +1 -674
  63. package/dist/search.d.ts +30 -0
  64. package/dist/search.js +92 -8
  65. package/dist/timezones/chunk_1.d.ts +2 -0
  66. package/dist/timezones/chunk_1.js +72 -0
  67. package/dist/timezones/chunk_2.d.ts +2 -0
  68. package/dist/timezones/chunk_2.js +72 -0
  69. package/dist/timezones/chunk_3.d.ts +2 -0
  70. package/dist/timezones/chunk_3.js +72 -0
  71. package/dist/timezones/chunk_4.d.ts +2 -0
  72. package/dist/timezones/chunk_4.js +72 -0
  73. package/dist/timezones/chunk_5.d.ts +2 -0
  74. package/dist/timezones/chunk_5.js +72 -0
  75. package/dist/timezones/chunk_6.d.ts +2 -0
  76. package/dist/timezones/chunk_6.js +72 -0
  77. package/dist/timezones/chunk_7.d.ts +2 -0
  78. package/dist/timezones/chunk_7.js +6 -0
  79. package/dist/timezones.d.ts +5 -0
  80. package/dist/timezones.js +14 -3
  81. package/dist/utils.d.ts +72 -0
  82. package/dist/utils.js +85 -1
  83. package/dist/validate/asserts.d.ts +155 -0
  84. package/dist/validate/asserts.js +381 -0
  85. package/dist/validate/constants.d.ts +25 -0
  86. package/dist/validate/constants.js +33 -0
  87. package/dist/validate/error.d.ts +19 -0
  88. package/dist/validate/error.js +25 -0
  89. package/dist/validate/validators-common.d.ts +64 -0
  90. package/dist/validate/validators-common.js +385 -0
  91. package/dist/validate/validators-objects.d.ts +8 -0
  92. package/dist/validate/validators-objects.js +70 -0
  93. package/dist/validate/validators-recurrence.d.ts +15 -0
  94. package/dist/validate/validators-recurrence.js +115 -0
  95. package/dist/validate/validators.d.ts +1 -0
  96. package/dist/validate/validators.js +1 -0
  97. package/dist/validate.d.ts +2 -6
  98. package/dist/validate.js +2 -745
  99. package/package.json +1 -1
@@ -0,0 +1,72 @@
1
+ export const TimeZonesChunk6 = [
2
+ "Europe/Podgorica",
3
+ "Europe/Prague",
4
+ "Europe/Riga",
5
+ "Europe/Rome",
6
+ "Europe/Samara",
7
+ "Europe/San_Marino",
8
+ "Europe/Sarajevo",
9
+ "Europe/Saratov",
10
+ "Europe/Simferopol",
11
+ "Europe/Skopje",
12
+ "Europe/Sofia",
13
+ "Europe/Stockholm",
14
+ "Europe/Tallinn",
15
+ "Europe/Tirane",
16
+ "Europe/Ulyanovsk",
17
+ "Europe/Uzhgorod",
18
+ "Europe/Vaduz",
19
+ "Europe/Vatican",
20
+ "Europe/Vienna",
21
+ "Europe/Vilnius",
22
+ "Europe/Volgograd",
23
+ "Europe/Warsaw",
24
+ "Europe/Zagreb",
25
+ "Europe/Zaporozhye",
26
+ "Europe/Zurich",
27
+ "Indian/Antananarivo",
28
+ "Indian/Chagos",
29
+ "Indian/Christmas",
30
+ "Indian/Cocos",
31
+ "Indian/Comoro",
32
+ "Indian/Kerguelen",
33
+ "Indian/Mahe",
34
+ "Indian/Maldives",
35
+ "Indian/Mauritius",
36
+ "Indian/Mayotte",
37
+ "Indian/Reunion",
38
+ "Pacific/Apia",
39
+ "Pacific/Auckland",
40
+ "Pacific/Bougainville",
41
+ "Pacific/Chatham",
42
+ "Pacific/Chuuk",
43
+ "Pacific/Easter",
44
+ "Pacific/Efate",
45
+ "Pacific/Enderbury",
46
+ "Pacific/Fakaofo",
47
+ "Pacific/Fiji",
48
+ "Pacific/Funafuti",
49
+ "Pacific/Galapagos",
50
+ "Pacific/Gambier",
51
+ "Pacific/Guadalcanal",
52
+ "Pacific/Guam",
53
+ "Pacific/Honolulu",
54
+ "Pacific/Kiritimati",
55
+ "Pacific/Kosrae",
56
+ "Pacific/Kwajalein",
57
+ "Pacific/Majuro",
58
+ "Pacific/Marquesas",
59
+ "Pacific/Midway",
60
+ "Pacific/Nauru",
61
+ "Pacific/Niue",
62
+ "Pacific/Norfolk",
63
+ "Pacific/Noumea",
64
+ "Pacific/Pago_Pago",
65
+ "Pacific/Palau",
66
+ "Pacific/Pitcairn",
67
+ "Pacific/Pohnpei",
68
+ "Pacific/Port_Moresby",
69
+ "Pacific/Rarotonga",
70
+ "Pacific/Saipan",
71
+ "Pacific/Tahiti",
72
+ ];
@@ -0,0 +1,2 @@
1
+ export type TimeZoneIdChunk7 = "Pacific/Tarawa" | "Pacific/Tongatapu" | "Pacific/Wake" | "Pacific/Wallis";
2
+ export declare const TimeZonesChunk7: TimeZoneIdChunk7[];
@@ -0,0 +1,6 @@
1
+ export const TimeZonesChunk7 = [
2
+ "Pacific/Tarawa",
3
+ "Pacific/Tongatapu",
4
+ "Pacific/Wake",
5
+ "Pacific/Wallis",
6
+ ];
@@ -1,4 +1,9 @@
1
1
  export type TimeZoneId = "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";
2
2
  export type TimeZoneInput = TimeZoneId | Lowercase<TimeZoneId>;
3
3
  export declare const TimeZones: TimeZoneId[];
4
+ /**
5
+ * Resolve a time zone input to its canonical ID.
6
+ * @param input Time zone input.
7
+ * @return Canonical TimeZoneId.
8
+ */
4
9
  export declare function resolveTimeZone(input: TimeZoneInput): TimeZoneId;
package/dist/timezones.js CHANGED
@@ -424,13 +424,24 @@ export const TimeZones = [
424
424
  "Pacific/Wake",
425
425
  "Pacific/Wallis",
426
426
  ];
427
- const TimeZoneMap = (() => {
427
+ /**
428
+ * Build a lowercase lookup map for time zones.
429
+ * @param zones List of time zone IDs.
430
+ * @return Map keyed by lowercase ID.
431
+ */
432
+ function createTimeZoneMap(zones) {
428
433
  const map = {};
429
- for (const tz of TimeZones) {
434
+ for (const tz of zones) {
430
435
  map[tz.toLowerCase()] = tz;
431
436
  }
432
437
  return map;
433
- })();
438
+ }
439
+ const TimeZoneMap = createTimeZoneMap(TimeZones);
440
+ /**
441
+ * Resolve a time zone input to its canonical ID.
442
+ * @param input Time zone input.
443
+ * @return Canonical TimeZoneId.
444
+ */
434
445
  export function resolveTimeZone(input) {
435
446
  const key = input.toLowerCase();
436
447
  const value = TimeZoneMap[key];
package/dist/utils.d.ts CHANGED
@@ -1,10 +1,82 @@
1
1
  import type { Duration, UTCDateTime } from "./types.js";
2
+ export type PrimitiveLike = string | number | boolean | object | null | undefined;
3
+ /**
4
+ * Check whether a value is a string.
5
+ * @param value Value to check.
6
+ * @return True if the value is a string.
7
+ */
8
+ export declare function isStringValue(value: PrimitiveLike): value is string;
9
+ /**
10
+ * Check whether a value is a number.
11
+ * @param value Value to check.
12
+ * @return True if the value is a number.
13
+ */
14
+ export declare function isNumberValue(value: PrimitiveLike): value is number;
15
+ /**
16
+ * Check whether a value is a boolean.
17
+ * @param value Value to check.
18
+ * @return True if the value is a boolean.
19
+ */
20
+ export declare function isBooleanValue(value: PrimitiveLike): value is boolean;
21
+ /**
22
+ * Check whether a value is a non-null object.
23
+ * @param value Value to check.
24
+ * @return True if the value is a non-null object.
25
+ */
26
+ export declare function isObjectValue(value: PrimitiveLike): value is object;
27
+ /**
28
+ * Get the current UTC date-time string.
29
+ * @return Current time as UTCDateTime.
30
+ */
2
31
  export declare function nowUtc(): UTCDateTime;
32
+ /**
33
+ * Deep-clone a value using structuredClone.
34
+ * @param value Value to clone.
35
+ * @return Deep clone of the input value.
36
+ */
3
37
  export declare function deepClone<T>(value: T): T;
38
+ /**
39
+ * Check if a string is a UTCDateTime with Z suffix.
40
+ * @param value Date-time string.
41
+ * @return True if the value ends with Z.
42
+ */
4
43
  export declare function isUtcDateTime(value: string): boolean;
44
+ /**
45
+ * Compare two date-time strings, returning null when incomparable.
46
+ * @param a Date-time string A.
47
+ * @param b Date-time string B.
48
+ * @return -1, 0, 1, or null when formats are incompatible.
49
+ */
5
50
  export declare function compareDateTime(a: string, b: string): number | null;
51
+ /**
52
+ * Convert a duration string to milliseconds.
53
+ * @param duration Duration string.
54
+ * @return Milliseconds or null when invalid.
55
+ */
6
56
  export declare function durationToMilliseconds(duration: Duration): number | null;
57
+ /**
58
+ * Normalize a UTCDateTime by trimming trailing fractional zeros.
59
+ * @param value UTCDateTime string.
60
+ * @return Normalized UTCDateTime string.
61
+ */
7
62
  export declare function normalizeUtcDateTime(value: string): UTCDateTime;
63
+ /**
64
+ * Format a Date as LocalDateTime string.
65
+ * @param value Date to format.
66
+ * @return LocalDateTime string.
67
+ */
8
68
  export declare function localDateTimeFromDate(value: Date): string;
69
+ /**
70
+ * Format a Date as a LocalDateTime in a target time zone.
71
+ * @param value Date to format.
72
+ * @param timeZone IANA time zone.
73
+ * @return LocalDateTime string in the time zone.
74
+ */
9
75
  export declare function dateTimeInTimeZone(value: Date, timeZone: string): string;
76
+ /**
77
+ * Convert LocalDateTime string to a UTC Date using a time zone.
78
+ * @param value LocalDateTime string.
79
+ * @param timeZone IANA time zone.
80
+ * @return Date in UTC.
81
+ */
10
82
  export declare function localDateTimeToUtcDate(value: string, timeZone: string): Date;
package/dist/utils.js CHANGED
@@ -1,17 +1,74 @@
1
1
  import { format } from "date-fns";
2
2
  import { formatInTimeZone, fromZonedTime } from "date-fns-tz";
3
+ const TYPEOF_FUNCTION = "function";
4
+ const TYPEOF_STRING = "string";
5
+ const TYPEOF_NUMBER = "number";
6
+ const TYPEOF_BOOLEAN = "boolean";
7
+ const TYPEOF_OBJECT = "object";
8
+ /**
9
+ * Check whether a value is a string.
10
+ * @param value Value to check.
11
+ * @return True if the value is a string.
12
+ */
13
+ export function isStringValue(value) {
14
+ return typeof value === TYPEOF_STRING;
15
+ }
16
+ /**
17
+ * Check whether a value is a number.
18
+ * @param value Value to check.
19
+ * @return True if the value is a number.
20
+ */
21
+ export function isNumberValue(value) {
22
+ return typeof value === TYPEOF_NUMBER;
23
+ }
24
+ /**
25
+ * Check whether a value is a boolean.
26
+ * @param value Value to check.
27
+ * @return True if the value is a boolean.
28
+ */
29
+ export function isBooleanValue(value) {
30
+ return typeof value === TYPEOF_BOOLEAN;
31
+ }
32
+ /**
33
+ * Check whether a value is a non-null object.
34
+ * @param value Value to check.
35
+ * @return True if the value is a non-null object.
36
+ */
37
+ export function isObjectValue(value) {
38
+ return value !== null && typeof value === TYPEOF_OBJECT;
39
+ }
40
+ /**
41
+ * Get the current UTC date-time string.
42
+ * @return Current time as UTCDateTime.
43
+ */
3
44
  export function nowUtc() {
4
45
  return normalizeUtcDateTime(new Date().toISOString());
5
46
  }
47
+ /**
48
+ * Deep-clone a value using structuredClone.
49
+ * @param value Value to clone.
50
+ * @return Deep clone of the input value.
51
+ */
6
52
  export function deepClone(value) {
7
- if (typeof structuredClone === "function") {
53
+ if (typeof structuredClone === TYPEOF_FUNCTION) {
8
54
  return structuredClone(value);
9
55
  }
10
56
  throw new Error("structuredClone is not available in this environment");
11
57
  }
58
+ /**
59
+ * Check if a string is a UTCDateTime with Z suffix.
60
+ * @param value Date-time string.
61
+ * @return True if the value ends with Z.
62
+ */
12
63
  export function isUtcDateTime(value) {
13
64
  return /Z$/.test(value);
14
65
  }
66
+ /**
67
+ * Compare two date-time strings, returning null when incomparable.
68
+ * @param a Date-time string A.
69
+ * @param b Date-time string B.
70
+ * @return -1, 0, 1, or null when formats are incompatible.
71
+ */
15
72
  export function compareDateTime(a, b) {
16
73
  const aUtc = isUtcDateTime(a);
17
74
  const bUtc = isUtcDateTime(b);
@@ -29,6 +86,11 @@ export function compareDateTime(a, b) {
29
86
  }
30
87
  return null;
31
88
  }
89
+ /**
90
+ * Convert a duration string to milliseconds.
91
+ * @param duration Duration string.
92
+ * @return Milliseconds or null when invalid.
93
+ */
32
94
  export function durationToMilliseconds(duration) {
33
95
  const re = /^P(?:(\d+)W)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/;
34
96
  const match = re.exec(duration);
@@ -46,6 +108,11 @@ export function durationToMilliseconds(duration) {
46
108
  seconds;
47
109
  return totalSeconds * 1000;
48
110
  }
111
+ /**
112
+ * Normalize a UTCDateTime by trimming trailing fractional zeros.
113
+ * @param value UTCDateTime string.
114
+ * @return Normalized UTCDateTime string.
115
+ */
49
116
  export function normalizeUtcDateTime(value) {
50
117
  const match = value.match(/^(.*)\.(\d+)Z$/);
51
118
  if (!match)
@@ -58,12 +125,29 @@ export function normalizeUtcDateTime(value) {
58
125
  }
59
126
  return `${prefix}.${trimmed}Z`;
60
127
  }
128
+ /**
129
+ * Format a Date as LocalDateTime string.
130
+ * @param value Date to format.
131
+ * @return LocalDateTime string.
132
+ */
61
133
  export function localDateTimeFromDate(value) {
62
134
  return format(value, "yyyy-MM-dd'T'HH:mm:ss");
63
135
  }
136
+ /**
137
+ * Format a Date as a LocalDateTime in a target time zone.
138
+ * @param value Date to format.
139
+ * @param timeZone IANA time zone.
140
+ * @return LocalDateTime string in the time zone.
141
+ */
64
142
  export function dateTimeInTimeZone(value, timeZone) {
65
143
  return formatInTimeZone(value, timeZone, "yyyy-MM-dd'T'HH:mm:ss");
66
144
  }
145
+ /**
146
+ * Convert LocalDateTime string to a UTC Date using a time zone.
147
+ * @param value LocalDateTime string.
148
+ * @param timeZone IANA time zone.
149
+ * @return Date in UTC.
150
+ */
67
151
  export function localDateTimeToUtcDate(value, timeZone) {
68
152
  const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/.exec(value);
69
153
  if (!match) {
@@ -0,0 +1,155 @@
1
+ import type { JsonValue, PatchObject } from "../types.js";
2
+ /**
3
+ * Get the UTF-8 byte length of a string.
4
+ * @param value Input string.
5
+ * @return Byte length.
6
+ */
7
+ export declare function utf8Length(value: string): number;
8
+ /**
9
+ * Check whether a value is a plain record.
10
+ * @param value Input value.
11
+ * @return True if the value is a record.
12
+ */
13
+ export declare function isRecord(value: object | null | undefined): value is Record<string, JsonValue>;
14
+ /**
15
+ * Assert a value is a string when defined.
16
+ * @param value Value to check.
17
+ * @param path Validation path.
18
+ * @return Nothing.
19
+ */
20
+ export declare function assertString(value: string | null | undefined, path: string): void;
21
+ /**
22
+ * Assert a value is a non-empty string when defined.
23
+ * @param value Value to check.
24
+ * @param path Validation path.
25
+ * @return Nothing.
26
+ */
27
+ export declare function assertNonEmptyString(value: string | undefined, path: string): void;
28
+ /**
29
+ * Assert a value is a valid Id when defined.
30
+ * @param value Value to check.
31
+ * @param path Validation path.
32
+ * @return Nothing.
33
+ */
34
+ export declare function assertId(value: string | undefined, path: string): void;
35
+ /**
36
+ * Assert a value is boolean when defined.
37
+ * @param value Value to check.
38
+ * @param path Validation path.
39
+ * @return Nothing.
40
+ */
41
+ export declare function assertBoolean(value: boolean | null | undefined, path: string): void;
42
+ /**
43
+ * Assert a value is an integer when defined.
44
+ * @param value Value to check.
45
+ * @param path Validation path.
46
+ * @return Nothing.
47
+ */
48
+ export declare function assertInteger(value: number | null | undefined, path: string): void;
49
+ /**
50
+ * Assert a value is a non-negative integer when defined.
51
+ * @param value Value to check.
52
+ * @param path Validation path.
53
+ * @return Nothing.
54
+ */
55
+ export declare function assertUnsignedInt(value: number | null | undefined, path: string): void;
56
+ /**
57
+ * Assert a date-time string matches the expected format.
58
+ * @param value Date-time string.
59
+ * @param path Validation path.
60
+ * @param requireZ Whether a Z suffix is required.
61
+ * @return Nothing.
62
+ */
63
+ export declare function assertDateTime(value: string | undefined, path: string, requireZ: boolean): void;
64
+ /**
65
+ * Assert local date time when provided.
66
+ * @param value LocalDateTime string.
67
+ * @param path Validation path.
68
+ * @return Nothing.
69
+ */
70
+ export declare function assertLocalDateTime(value: string | undefined, path: string): void;
71
+ /**
72
+ * Assert utc date time when provided.
73
+ * @param value UTCDateTime string.
74
+ * @param path Validation path.
75
+ * @return Nothing.
76
+ */
77
+ export declare function assertUtcDateTime(value: string | undefined, path: string): void;
78
+ /**
79
+ * Assert duration like when provided.
80
+ * @param value Duration string.
81
+ * @param path Validation path.
82
+ * @param signed Whether negative values are allowed.
83
+ * @return Nothing.
84
+ */
85
+ export declare function assertDurationLike(value: string | undefined, path: string, signed: boolean): void;
86
+ /**
87
+ * Assert duration when provided.
88
+ * @param value Duration string.
89
+ * @param path Validation path.
90
+ * @return Nothing.
91
+ */
92
+ export declare function assertDuration(value: string | undefined, path: string): void;
93
+ /**
94
+ * Assert signed duration when provided.
95
+ * @param value Duration string.
96
+ * @param path Validation path.
97
+ * @return Nothing.
98
+ */
99
+ export declare function assertSignedDuration(value: string | undefined, path: string): void;
100
+ /**
101
+ * Assert boolean map when provided.
102
+ * @param value Boolean map object.
103
+ * @param path Validation path.
104
+ * @return Nothing.
105
+ */
106
+ export declare function assertBooleanMap(value: object | undefined, path: string): void;
107
+ /**
108
+ * Assert ID boolean map when provided.
109
+ * @param value Boolean map object keyed by Ids.
110
+ * @param path Validation path.
111
+ * @return Nothing.
112
+ */
113
+ export declare function assertIdBooleanMap(value: object | undefined, path: string): void;
114
+ /**
115
+ * Assert media type when provided.
116
+ * @param value Media type string.
117
+ * @param path Validation path.
118
+ * @return Nothing.
119
+ */
120
+ export declare function assertMediaType(value: string | undefined, path: string): void;
121
+ /**
122
+ * Assert text content type when provided.
123
+ * @param value Media type string.
124
+ * @param path Validation path.
125
+ * @return Nothing.
126
+ */
127
+ export declare function assertTextContentType(value: string | undefined, path: string): void;
128
+ /**
129
+ * Assert content ID when provided.
130
+ * @param value Content-ID string.
131
+ * @param path Validation path.
132
+ * @return Nothing.
133
+ */
134
+ export declare function assertContentId(value: string | undefined, path: string): void;
135
+ /**
136
+ * Assert time zone when provided.
137
+ * @param value Time zone ID.
138
+ * @param path Validation path.
139
+ * @return Nothing.
140
+ */
141
+ export declare function assertTimeZone(value: string | null | undefined, path: string): void;
142
+ /**
143
+ * Assert json value when provided.
144
+ * @param value JSON value.
145
+ * @param path Validation path.
146
+ * @return Nothing.
147
+ */
148
+ export declare function assertJsonValue(value: JsonValue | object | null | undefined, path: string): void;
149
+ /**
150
+ * Assert patch object when provided.
151
+ * @param value PatchObject.
152
+ * @param path Validation path.
153
+ * @return Nothing.
154
+ */
155
+ export declare function assertPatchObject(value: PatchObject | undefined, path: string): void;