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