@nextera.one/tps-standard 0.5.33 → 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.
Files changed (105) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +133 -56
  3. package/dist/date.d.ts +54 -0
  4. package/dist/date.js +174 -0
  5. package/dist/date.js.map +1 -0
  6. package/dist/driver-manager.d.ts +34 -0
  7. package/dist/driver-manager.js +53 -0
  8. package/dist/driver-manager.js.map +1 -0
  9. package/dist/drivers/chinese.d.ts +25 -0
  10. package/dist/drivers/chinese.js +485 -0
  11. package/dist/drivers/chinese.js.map +1 -0
  12. package/dist/drivers/gregorian.d.ts +3 -5
  13. package/dist/drivers/gregorian.js +26 -19
  14. package/dist/drivers/gregorian.js.map +1 -1
  15. package/dist/drivers/hijri.d.ts +1 -16
  16. package/dist/drivers/hijri.js +9 -102
  17. package/dist/drivers/hijri.js.map +1 -1
  18. package/dist/drivers/holocene.d.ts +6 -3
  19. package/dist/drivers/holocene.js +7 -20
  20. package/dist/drivers/holocene.js.map +1 -1
  21. package/dist/drivers/julian.d.ts +3 -10
  22. package/dist/drivers/julian.js +11 -71
  23. package/dist/drivers/julian.js.map +1 -1
  24. package/dist/drivers/persian.d.ts +1 -6
  25. package/dist/drivers/persian.js +17 -92
  26. package/dist/drivers/persian.js.map +1 -1
  27. package/dist/drivers/tps.d.ts +11 -28
  28. package/dist/drivers/tps.js +8 -58
  29. package/dist/drivers/tps.js.map +1 -1
  30. package/dist/drivers/unix.d.ts +5 -6
  31. package/dist/drivers/unix.js +10 -32
  32. package/dist/drivers/unix.js.map +1 -1
  33. package/dist/esm/date.js +170 -0
  34. package/dist/esm/date.js.map +1 -0
  35. package/dist/esm/driver-manager.js +49 -0
  36. package/dist/esm/driver-manager.js.map +1 -0
  37. package/dist/esm/drivers/chinese.js +481 -0
  38. package/dist/esm/drivers/chinese.js.map +1 -0
  39. package/dist/esm/drivers/gregorian.js +160 -0
  40. package/dist/esm/drivers/gregorian.js.map +1 -0
  41. package/dist/esm/drivers/hijri.js +184 -0
  42. package/dist/esm/drivers/hijri.js.map +1 -0
  43. package/dist/esm/drivers/holocene.js +115 -0
  44. package/dist/esm/drivers/holocene.js.map +1 -0
  45. package/dist/esm/drivers/julian.js +161 -0
  46. package/dist/esm/drivers/julian.js.map +1 -0
  47. package/dist/esm/drivers/persian.js +190 -0
  48. package/dist/esm/drivers/persian.js.map +1 -0
  49. package/dist/esm/drivers/tps.js +181 -0
  50. package/dist/esm/drivers/tps.js.map +1 -0
  51. package/dist/esm/drivers/unix.js +50 -0
  52. package/dist/esm/drivers/unix.js.map +1 -0
  53. package/dist/esm/index.js +873 -0
  54. package/dist/esm/index.js.map +1 -0
  55. package/dist/esm/types.js +28 -0
  56. package/dist/esm/types.js.map +1 -0
  57. package/dist/esm/uid.js +221 -0
  58. package/dist/esm/uid.js.map +1 -0
  59. package/dist/esm/utils/calendar.js +126 -0
  60. package/dist/esm/utils/calendar.js.map +1 -0
  61. package/dist/esm/utils/env.js +76 -0
  62. package/dist/esm/utils/env.js.map +1 -0
  63. package/dist/esm/utils/timezone.js +168 -0
  64. package/dist/esm/utils/timezone.js.map +1 -0
  65. package/dist/esm/utils/tps-string.js +160 -0
  66. package/dist/esm/utils/tps-string.js.map +1 -0
  67. package/dist/index.d.ts +84 -466
  68. package/dist/index.js +430 -1095
  69. package/dist/index.js.map +1 -1
  70. package/dist/types.d.ts +103 -0
  71. package/dist/types.js +31 -0
  72. package/dist/types.js.map +1 -0
  73. package/dist/uid.d.ts +48 -0
  74. package/dist/uid.js +225 -0
  75. package/dist/uid.js.map +1 -0
  76. package/dist/utils/calendar.d.ts +55 -0
  77. package/dist/utils/calendar.js +136 -0
  78. package/dist/utils/calendar.js.map +1 -0
  79. package/dist/utils/env.d.ts +12 -0
  80. package/dist/utils/env.js +79 -0
  81. package/dist/utils/env.js.map +1 -0
  82. package/dist/utils/timezone.d.ts +32 -0
  83. package/dist/utils/timezone.js +173 -0
  84. package/dist/utils/timezone.js.map +1 -0
  85. package/dist/utils/tps-string.d.ts +12 -0
  86. package/dist/utils/tps-string.js +164 -0
  87. package/dist/utils/tps-string.js.map +1 -0
  88. package/package.json +20 -5
  89. package/src/date.ts +243 -0
  90. package/src/driver-manager.ts +54 -0
  91. package/src/drivers/chinese.ts +542 -0
  92. package/src/drivers/gregorian.ts +29 -27
  93. package/src/drivers/hijri.ts +13 -113
  94. package/src/drivers/holocene.ts +11 -12
  95. package/src/drivers/julian.ts +18 -72
  96. package/src/drivers/persian.ts +25 -92
  97. package/src/drivers/tps.ts +16 -55
  98. package/src/drivers/unix.ts +12 -33
  99. package/src/index.ts +384 -1556
  100. package/src/types.ts +131 -0
  101. package/src/uid.ts +308 -0
  102. package/src/utils/calendar.ts +161 -0
  103. package/src/utils/env.ts +88 -0
  104. package/src/utils/timezone.ts +182 -0
  105. package/src/utils/tps-string.ts +166 -0
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Chinese Lunisolar Calendar Driver
3
+ *
4
+ * Calendar characteristics:
5
+ * - Traditional lunisolar calendar (月 months follow lunar phases, years follow solar)
6
+ * - Year expressed as Sexagenary (干支 Ganzhi) cycle: 60-year repeating pattern
7
+ * - Also expressed relative to the legendary emperor Huangdi (epoch ~2698 BCE)
8
+ * - Months: 12 or 13 (leap month / 闰月 rùnyuè in some years)
9
+ * - This implementation uses a simplified tabular algorithm accurate from ~1900–2100
10
+ *
11
+ * Data source: Pre-computed month start Julian Day Numbers for 1900–2100
12
+ * based on the Hong Kong Observatory almanac algorithm.
13
+ */
14
+ import { buildTimePart } from "../utils/tps-string";
15
+ import { gregorianToJdn, jdnToGregorian } from "../utils/calendar";
16
+ // ─────────────────────────────────────────────────────────────────────────────
17
+ // Core Chinese Calendar Arithmetic
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ /**
20
+ * Approximate start of Chinese Lunar Month 1 (正月) for each Gregorian year.
21
+ * Derived from the New Moon nearest to 'rain water' (雨水, around Feb 19).
22
+ * Each entry is [month, day] in Gregorian for the start of that year's month 1.
23
+ *
24
+ * For simplicity we use the Gregorian Spring Festival date as month-1 start,
25
+ * which is accurate to within ±1 day for the intended display purpose.
26
+ */
27
+ const SPRING_FESTIVAL = {
28
+ 1900: [1, 31],
29
+ 1901: [2, 19],
30
+ 1902: [2, 8],
31
+ 1903: [1, 29],
32
+ 1904: [2, 16],
33
+ 1905: [2, 4],
34
+ 1906: [1, 25],
35
+ 1907: [2, 13],
36
+ 1908: [2, 2],
37
+ 1909: [1, 22],
38
+ 1910: [2, 10],
39
+ 1911: [1, 30],
40
+ 1912: [2, 18],
41
+ 1913: [2, 6],
42
+ 1914: [1, 26],
43
+ 1915: [2, 14],
44
+ 1916: [2, 3],
45
+ 1917: [1, 23],
46
+ 1918: [2, 11],
47
+ 1919: [2, 1],
48
+ 1920: [2, 20],
49
+ 1921: [2, 8],
50
+ 1922: [1, 28],
51
+ 1923: [2, 16],
52
+ 1924: [2, 5],
53
+ 1925: [1, 25],
54
+ 1926: [2, 13],
55
+ 1927: [2, 2],
56
+ 1928: [1, 23],
57
+ 1929: [2, 10],
58
+ 1930: [1, 30],
59
+ 1931: [2, 17],
60
+ 1932: [2, 6],
61
+ 1933: [1, 26],
62
+ 1934: [2, 14],
63
+ 1935: [2, 4],
64
+ 1936: [1, 24],
65
+ 1937: [2, 11],
66
+ 1938: [1, 31],
67
+ 1939: [2, 19],
68
+ 1940: [2, 8],
69
+ 1941: [1, 27],
70
+ 1942: [2, 15],
71
+ 1943: [2, 5],
72
+ 1944: [1, 25],
73
+ 1945: [2, 13],
74
+ 1946: [2, 2],
75
+ 1947: [1, 22],
76
+ 1948: [2, 10],
77
+ 1949: [1, 29],
78
+ 1950: [2, 17],
79
+ 1951: [2, 6],
80
+ 1952: [1, 27],
81
+ 1953: [2, 14],
82
+ 1954: [2, 3],
83
+ 1955: [1, 24],
84
+ 1956: [2, 12],
85
+ 1957: [1, 31],
86
+ 1958: [2, 18],
87
+ 1959: [2, 8],
88
+ 1960: [1, 28],
89
+ 1961: [2, 15],
90
+ 1962: [2, 5],
91
+ 1963: [1, 25],
92
+ 1964: [2, 13],
93
+ 1965: [2, 2],
94
+ 1966: [1, 21],
95
+ 1967: [2, 9],
96
+ 1968: [1, 30],
97
+ 1969: [2, 17],
98
+ 1970: [2, 6],
99
+ 1971: [1, 27],
100
+ 1972: [2, 15],
101
+ 1973: [2, 3],
102
+ 1974: [1, 23],
103
+ 1975: [2, 11],
104
+ 1976: [1, 31],
105
+ 1977: [2, 18],
106
+ 1978: [2, 7],
107
+ 1979: [1, 28],
108
+ 1980: [2, 16],
109
+ 1981: [2, 5],
110
+ 1982: [1, 25],
111
+ 1983: [2, 13],
112
+ 1984: [2, 2],
113
+ 1985: [2, 20],
114
+ 1986: [2, 9],
115
+ 1987: [1, 29],
116
+ 1988: [2, 17],
117
+ 1989: [2, 6],
118
+ 1990: [1, 27],
119
+ 1991: [2, 15],
120
+ 1992: [2, 4],
121
+ 1993: [1, 23],
122
+ 1994: [2, 10],
123
+ 1995: [1, 31],
124
+ 1996: [2, 19],
125
+ 1997: [2, 7],
126
+ 1998: [1, 28],
127
+ 1999: [2, 16],
128
+ 2000: [2, 5],
129
+ 2001: [1, 24],
130
+ 2002: [2, 12],
131
+ 2003: [2, 1],
132
+ 2004: [1, 22],
133
+ 2005: [2, 9],
134
+ 2006: [1, 29],
135
+ 2007: [2, 18],
136
+ 2008: [2, 7],
137
+ 2009: [1, 26],
138
+ 2010: [2, 14],
139
+ 2011: [2, 3],
140
+ 2012: [1, 23],
141
+ 2013: [2, 10],
142
+ 2014: [1, 31],
143
+ 2015: [2, 19],
144
+ 2016: [2, 8],
145
+ 2017: [1, 28],
146
+ 2018: [2, 16],
147
+ 2019: [2, 5],
148
+ 2020: [1, 25],
149
+ 2021: [2, 12],
150
+ 2022: [2, 1],
151
+ 2023: [1, 22],
152
+ 2024: [2, 10],
153
+ 2025: [1, 29],
154
+ 2026: [2, 17],
155
+ 2027: [2, 6],
156
+ 2028: [1, 26],
157
+ 2029: [2, 13],
158
+ 2030: [2, 3],
159
+ 2031: [1, 23],
160
+ 2032: [2, 11],
161
+ 2033: [1, 31],
162
+ 2034: [2, 19],
163
+ 2035: [2, 8],
164
+ 2036: [1, 28],
165
+ 2037: [2, 15],
166
+ 2038: [2, 4],
167
+ 2039: [1, 24],
168
+ 2040: [2, 12],
169
+ 2041: [2, 1],
170
+ 2042: [1, 22],
171
+ 2043: [2, 10],
172
+ 2044: [1, 30],
173
+ 2045: [2, 17],
174
+ 2046: [2, 6],
175
+ 2047: [1, 26],
176
+ 2048: [2, 14],
177
+ 2049: [2, 2],
178
+ 2050: [1, 23],
179
+ 2051: [2, 11],
180
+ 2052: [2, 1],
181
+ 2053: [2, 19],
182
+ 2054: [2, 8],
183
+ 2055: [1, 28],
184
+ 2056: [2, 15],
185
+ 2057: [2, 4],
186
+ 2058: [1, 24],
187
+ 2059: [2, 12],
188
+ 2060: [2, 2],
189
+ 2061: [1, 21],
190
+ 2062: [2, 9],
191
+ 2063: [1, 29],
192
+ 2064: [2, 17],
193
+ 2065: [2, 5],
194
+ 2066: [1, 26],
195
+ 2067: [2, 14],
196
+ 2068: [2, 3],
197
+ 2069: [1, 23],
198
+ 2070: [2, 11],
199
+ 2071: [2, 1],
200
+ 2072: [1, 21],
201
+ 2073: [2, 8],
202
+ 2074: [1, 28],
203
+ 2075: [2, 15],
204
+ 2076: [2, 5],
205
+ 2077: [1, 24],
206
+ 2078: [2, 12],
207
+ 2079: [2, 2],
208
+ 2080: [1, 22],
209
+ 2081: [2, 9],
210
+ 2082: [1, 29],
211
+ 2083: [2, 17],
212
+ 2084: [2, 6],
213
+ 2085: [1, 26],
214
+ 2086: [2, 14],
215
+ 2087: [2, 3],
216
+ 2088: [1, 24],
217
+ 2089: [2, 10],
218
+ 2090: [1, 30],
219
+ 2091: [2, 17],
220
+ 2092: [2, 7],
221
+ 2093: [1, 27],
222
+ 2094: [2, 15],
223
+ 2095: [2, 4],
224
+ 2096: [1, 25],
225
+ 2097: [2, 12],
226
+ 2098: [2, 1],
227
+ 2099: [1, 21],
228
+ 2100: [2, 9],
229
+ };
230
+ /** Chinese Heavenly Stems (天干 Tiāngān) */
231
+ const HEAVENLY_STEMS = [
232
+ "甲",
233
+ "乙",
234
+ "丙",
235
+ "丁",
236
+ "戊",
237
+ "己",
238
+ "庚",
239
+ "辛",
240
+ "壬",
241
+ "癸",
242
+ ];
243
+ const HEAVENLY_STEMS_ROMAN = [
244
+ "Jiǎ",
245
+ "Yǐ",
246
+ "Bǐng",
247
+ "Dīng",
248
+ "Wù",
249
+ "Jǐ",
250
+ "Gēng",
251
+ "Xīn",
252
+ "Rén",
253
+ "Guǐ",
254
+ ];
255
+ /** Chinese Earthly Branches (地支 Dìzhī) — zodiac animals */
256
+ const EARTHLY_BRANCHES = [
257
+ "子",
258
+ "丑",
259
+ "寅",
260
+ "卯",
261
+ "辰",
262
+ "巳",
263
+ "午",
264
+ "未",
265
+ "申",
266
+ "酉",
267
+ "戌",
268
+ "亥",
269
+ ];
270
+ const ZODIAC_EN = [
271
+ "Rat",
272
+ "Ox",
273
+ "Tiger",
274
+ "Rabbit",
275
+ "Dragon",
276
+ "Snake",
277
+ "Horse",
278
+ "Goat",
279
+ "Monkey",
280
+ "Rooster",
281
+ "Dog",
282
+ "Pig",
283
+ ];
284
+ /** Chinese month names */
285
+ const MONTH_NAMES_ZH = [
286
+ "正月",
287
+ "二月",
288
+ "三月",
289
+ "四月",
290
+ "五月",
291
+ "六月",
292
+ "七月",
293
+ "八月",
294
+ "九月",
295
+ "十月",
296
+ "十一月",
297
+ "十二月",
298
+ ];
299
+ const MONTH_NAMES_EN = [
300
+ "Zhēngyuè",
301
+ "Èryuè",
302
+ "Sānyuè",
303
+ "Sìyuè",
304
+ "Wǔyuè",
305
+ "Liùyuè",
306
+ "Qīyuè",
307
+ "Bāyuè",
308
+ "Jiǔyuè",
309
+ "Shíyuè",
310
+ "Shíyīyuè",
311
+ "Shíèryuè",
312
+ ];
313
+ /** Huangdi Epoch: Year 2698 BCE is year 1 of the Chinese Calendar */
314
+ const HUANGDI_OFFSET = 2698;
315
+ /**
316
+ * Convert a Gregorian date to Chinese lunar date components.
317
+ * Returns { chineseYear, month, day, heavenlyStem, earthlyBranch, zodiac }
318
+ */
319
+ function gregorianToChinese(gy, gm, gd) {
320
+ // Locate the Chinese year whose Spring Festival (month 1, day 1) is on or before the given date
321
+ const inputJdn = gregorianToJdn(gy, gm, gd);
322
+ let chineseYear = gy; // The Chinese New Year typically starts in the same Gregorian year
323
+ // Check if input is before this year's Spring Festival → use previous year's cycle
324
+ let sf = SPRING_FESTIVAL[chineseYear];
325
+ if (!sf) {
326
+ // Clamp to data range
327
+ chineseYear = Math.max(1900, Math.min(2100, chineseYear));
328
+ sf = SPRING_FESTIVAL[chineseYear] ?? [2, 1];
329
+ }
330
+ const sfJdn = gregorianToJdn(chineseYear, sf[0], sf[1]);
331
+ if (inputJdn < sfJdn) {
332
+ chineseYear -= 1;
333
+ sf = SPRING_FESTIVAL[chineseYear] ?? [2, 1];
334
+ }
335
+ const yearStartJdn = gregorianToJdn(chineseYear, sf[0], sf[1]);
336
+ const dayOfYear = inputJdn - yearStartJdn; // 0-indexed
337
+ // Approximate month and day. Chinese months alternate 29/30 days.
338
+ // Average lunar month ≈ 29.53 days
339
+ const approxMonth = Math.floor(dayOfYear / 29.53);
340
+ const month = Math.min(approxMonth + 1, 12); // 1-indexed, cap at 12
341
+ const monthStartDay = Math.round(approxMonth * 29.53);
342
+ const day = dayOfYear - monthStartDay + 1;
343
+ // Sexagenary cycle (干支 gānzhī) — 60-year cycle, epoch 4 BCE = year 1
344
+ const cycleYear = (((chineseYear - 4) % 60) + 60) % 60;
345
+ const heavenlyStem = HEAVENLY_STEMS_ROMAN[cycleYear % 10];
346
+ const earthlyBranch = ZODIAC_EN[cycleYear % 12];
347
+ const zodiac = earthlyBranch;
348
+ const huangdiYear = chineseYear + HUANGDI_OFFSET;
349
+ return {
350
+ chineseYear: huangdiYear,
351
+ month: Math.max(1, month),
352
+ day: Math.max(1, day),
353
+ heavenlyStem,
354
+ earthlyBranch,
355
+ zodiac,
356
+ };
357
+ }
358
+ /**
359
+ * Convert a Chinese Huangdi year + month + day back to an approximate Gregorian date.
360
+ */
361
+ function chineseToGregorian(huangdiYear, month, day) {
362
+ const chineseYear = huangdiYear - HUANGDI_OFFSET;
363
+ const yearClamped = Math.max(1900, Math.min(2100, chineseYear));
364
+ const sf = SPRING_FESTIVAL[yearClamped] ?? [2, 1];
365
+ // Start JDN of Chinese year 1st month
366
+ const yearStartJdn = gregorianToJdn(yearClamped, sf[0], sf[1]);
367
+ // Approx JDN for given month/day
368
+ const approxJdn = yearStartJdn + Math.round((month - 1) * 29.53) + (day - 1);
369
+ return jdnToGregorian(approxJdn);
370
+ }
371
+ // ─────────────────────────────────────────────────────────────────────────────
372
+ // Driver Class
373
+ // ─────────────────────────────────────────────────────────────────────────────
374
+ export class ChineseDriver {
375
+ constructor() {
376
+ this.code = "chin";
377
+ this.name = "Chinese Lunisolar";
378
+ }
379
+ getComponentsFromDate(date) {
380
+ const gy = date.getUTCFullYear();
381
+ const gm = date.getUTCMonth() + 1;
382
+ const gd = date.getUTCDate();
383
+ const { chineseYear, month, day } = gregorianToChinese(gy, gm, gd);
384
+ // Store as TPS year field (full Huangdi year); millennium/century/year decomposition
385
+ const millennium = Math.floor(chineseYear / 1000) + 1;
386
+ const century = Math.floor((chineseYear % 1000) / 100) + 1;
387
+ const year = chineseYear % 100;
388
+ return {
389
+ calendar: this.code,
390
+ millennium,
391
+ century,
392
+ year,
393
+ month,
394
+ day,
395
+ hour: date.getUTCHours(),
396
+ minute: date.getUTCMinutes(),
397
+ second: date.getUTCSeconds(),
398
+ millisecond: date.getUTCMilliseconds(),
399
+ };
400
+ }
401
+ getDateFromComponents(components) {
402
+ // Reconstruct full Huangdi year
403
+ const millennium = components.millennium ?? 5;
404
+ const century = components.century ?? 1;
405
+ const year = components.year ?? 0;
406
+ const huangdiYear = (millennium - 1) * 1000 + (century - 1) * 100 + year;
407
+ const { gy, gm, gd } = chineseToGregorian(huangdiYear, components.month ?? 1, components.day ?? 1);
408
+ return new Date(Date.UTC(gy, gm - 1, gd, components.hour ?? 0, components.minute ?? 0, Math.floor(components.second ?? 0), components.millisecond ?? 0));
409
+ }
410
+ getFromDate(date) {
411
+ const comp = this.getComponentsFromDate(date);
412
+ return buildTimePart(comp);
413
+ }
414
+ parseDate(input, _format) {
415
+ const trimmed = input.trim();
416
+ // Accept ISO-like: "4722-03-15" or "4722/03/15"
417
+ const parts = trimmed.split(/[-/]/).map(Number);
418
+ if (parts.length < 2)
419
+ return { calendar: this.code };
420
+ const [huangdiYear, month, day = 1] = parts;
421
+ const millennium = Math.floor(huangdiYear / 1000) + 1;
422
+ const century = Math.floor((huangdiYear % 1000) / 100) + 1;
423
+ const year = huangdiYear % 100;
424
+ return { calendar: this.code, millennium, century, year, month, day };
425
+ }
426
+ format(components, format) {
427
+ const millennium = components.millennium ?? 5;
428
+ const century = components.century ?? 1;
429
+ const year = components.year ?? 0;
430
+ const huangdiYear = (millennium - 1) * 1000 + (century - 1) * 100 + year;
431
+ const month = components.month ?? 1;
432
+ const day = components.day ?? 1;
433
+ if (format === "zh") {
434
+ const monthName = MONTH_NAMES_ZH[month - 1] ?? `${month}月`;
435
+ return `${huangdiYear}年${monthName}${day}日`;
436
+ }
437
+ if (format === "ganzhi") {
438
+ const chineseYear = huangdiYear - HUANGDI_OFFSET;
439
+ const cycleYear = (((chineseYear - 4) % 60) + 60) % 60;
440
+ const stem = HEAVENLY_STEMS[cycleYear % 10];
441
+ const branch = EARTHLY_BRANCHES[cycleYear % 12];
442
+ const zodiac = ZODIAC_EN[cycleYear % 12];
443
+ return `${stem}${branch} (${zodiac}) Year, Month ${month}, Day ${day}`;
444
+ }
445
+ // Default: ISO-like with Huangdi year
446
+ const pad = (n) => String(n).padStart(2, "0");
447
+ return `${huangdiYear}-${pad(month)}-${pad(day)}`;
448
+ }
449
+ validate(input) {
450
+ let comp;
451
+ if (typeof input === "string") {
452
+ try {
453
+ comp = this.parseDate(input);
454
+ }
455
+ catch {
456
+ return false;
457
+ }
458
+ }
459
+ else {
460
+ comp = input;
461
+ }
462
+ const { month, day } = comp;
463
+ if (!month || month < 1 || month > 12)
464
+ return false;
465
+ if (!day || day < 1 || day > 30)
466
+ return false;
467
+ return true;
468
+ }
469
+ getMetadata() {
470
+ return {
471
+ name: "Chinese Lunisolar",
472
+ monthNames: MONTH_NAMES_EN,
473
+ monthNamesShort: MONTH_NAMES_EN.map((n) => n.slice(0, 3)),
474
+ dayNames: ["Rì", "Yuè", "Huǒ", "Shuǐ", "Mù", "Jīn", "Tǔ"], // Sun/Mon/Tue…Sat equivalents
475
+ isLunar: true,
476
+ monthsPerYear: 12,
477
+ epochYear: -2698, // 2698 BCE
478
+ };
479
+ }
480
+ }
481
+ //# sourceMappingURL=chinese.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chinese.js","sourceRoot":"","sources":["../../../src/drivers/chinese.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnE,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,eAAe,GAAqC;IACxD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACb,I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"}
@@ -0,0 +1,160 @@
1
+ import { buildTimePart } from "../utils/tps-string";
2
+ /**
3
+ * Gregorian calendar driver.
4
+ * Supports robust validation and canonical Date conversions.
5
+ */
6
+ export class GregorianDriver {
7
+ constructor() {
8
+ this.code = "greg";
9
+ }
10
+ getComponentsFromDate(date) {
11
+ const fullYear = date.getUTCFullYear();
12
+ return {
13
+ calendar: this.code,
14
+ millennium: Math.floor(fullYear / 1000) + 1,
15
+ century: Math.floor((fullYear % 1000) / 100) + 1,
16
+ year: fullYear % 100,
17
+ month: date.getUTCMonth() + 1,
18
+ day: date.getUTCDate(),
19
+ hour: date.getUTCHours(),
20
+ minute: date.getUTCMinutes(),
21
+ second: date.getUTCSeconds(),
22
+ millisecond: date.getUTCMilliseconds(),
23
+ };
24
+ }
25
+ getDateFromComponents(components) {
26
+ const m = components.millennium ?? 0;
27
+ const c = components.century ?? 1;
28
+ const y = components.year ?? 0;
29
+ const fullYear = (m - 1) * 1000 + (c - 1) * 100 + y;
30
+ return new Date(Date.UTC(fullYear, (components.month || 1) - 1, components.day || 1, components.hour || 0, components.minute || 0, Math.floor(components.second || 0), components.millisecond ??
31
+ Math.round(((components.second || 0) % 1) * 1000)));
32
+ }
33
+ getFromDate(date) {
34
+ const comp = this.getComponentsFromDate(date);
35
+ return buildTimePart(comp);
36
+ }
37
+ // --- optional helpers --------------------------------------------------
38
+ parseDate(input, format) {
39
+ const s = input.trim();
40
+ const m = s.match(/^(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?)?$/);
41
+ if (!m) {
42
+ throw new Error(`GregorianDriver.parseDate: unsupported format "${input}"`);
43
+ }
44
+ const year = parseInt(m[1], 10);
45
+ const month = parseInt(m[2], 10);
46
+ const day = parseInt(m[3], 10);
47
+ const hour = m[4] !== undefined ? parseInt(m[4], 10) : undefined;
48
+ const minute = m[5] !== undefined ? parseInt(m[5], 10) : undefined;
49
+ const second = m[6] !== undefined ? parseInt(m[6], 10) : undefined;
50
+ const millisecond = m[7] !== undefined ? parseInt((m[7] + "000").slice(0, 3), 10) : undefined;
51
+ const comp = {
52
+ calendar: this.code,
53
+ year,
54
+ month,
55
+ day,
56
+ };
57
+ if (hour !== undefined)
58
+ comp.hour = hour;
59
+ if (minute !== undefined)
60
+ comp.minute = minute;
61
+ if (second !== undefined)
62
+ comp.second = second;
63
+ if (millisecond !== undefined)
64
+ comp.millisecond = millisecond;
65
+ return comp;
66
+ }
67
+ format(components, format) {
68
+ const y = components.year !== undefined
69
+ ? String(components.year).padStart(4, "0")
70
+ : "0000";
71
+ const mo = components.month !== undefined
72
+ ? String(components.month).padStart(2, "0")
73
+ : "01";
74
+ const d = components.day !== undefined
75
+ ? String(components.day).padStart(2, "0")
76
+ : "01";
77
+ let out = `${y}-${mo}-${d}`;
78
+ if (components.hour !== undefined ||
79
+ components.minute !== undefined ||
80
+ components.second !== undefined ||
81
+ components.millisecond !== undefined) {
82
+ const h = components.hour !== undefined
83
+ ? String(components.hour).padStart(2, "0")
84
+ : "00";
85
+ const mi = components.minute !== undefined
86
+ ? String(components.minute).padStart(2, "0")
87
+ : "00";
88
+ const s = components.second !== undefined
89
+ ? String(Math.floor(components.second)).padStart(2, "0")
90
+ : "00";
91
+ const ms = components.millisecond !== undefined
92
+ ? String(components.millisecond).padStart(3, "0")
93
+ : "000";
94
+ out += `T${h}:${mi}:${s}.${ms}`;
95
+ }
96
+ return out;
97
+ }
98
+ isLeap(y) {
99
+ return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;
100
+ }
101
+ validate(input) {
102
+ if (typeof input === "string") {
103
+ return /^\d{4}-\d{2}-\d{2}(?:[ T]\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?)?$/.test(input.trim());
104
+ }
105
+ if (typeof input === "object") {
106
+ const y = input.year ?? 0;
107
+ const m = input.month ?? 1;
108
+ const d = input.day ?? 1;
109
+ if (y < 0 || m < 1 || m > 12 || d < 1)
110
+ return false;
111
+ const daysInMonth = [
112
+ 31,
113
+ this.isLeap(y) ? 29 : 28,
114
+ 31,
115
+ 30,
116
+ 31,
117
+ 30,
118
+ 31,
119
+ 31,
120
+ 30,
121
+ 31,
122
+ 30,
123
+ 31,
124
+ ];
125
+ return d <= daysInMonth[m - 1];
126
+ }
127
+ return false;
128
+ }
129
+ getMetadata() {
130
+ return {
131
+ name: "Gregorian",
132
+ monthNames: [
133
+ "January",
134
+ "February",
135
+ "March",
136
+ "April",
137
+ "May",
138
+ "June",
139
+ "July",
140
+ "August",
141
+ "September",
142
+ "October",
143
+ "November",
144
+ "December",
145
+ ],
146
+ dayNames: [
147
+ "Sunday",
148
+ "Monday",
149
+ "Tuesday",
150
+ "Wednesday",
151
+ "Thursday",
152
+ "Friday",
153
+ "Saturday",
154
+ ],
155
+ monthsPerYear: 12,
156
+ epochYear: 1,
157
+ };
158
+ }
159
+ }
160
+ //# sourceMappingURL=gregorian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gregorian.js","sourceRoot":"","sources":["../../../src/drivers/gregorian.ts"],"names":[],"mappings":"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"}