@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,49 @@
1
+ /**
2
+ * TPS DriverManager
3
+ * Manages the registry of calendar driver plugins.
4
+ */
5
+ /**
6
+ * A dedicated registry for TPS calendar driver plugins.
7
+ * The global `TPS` class exposes a shared singleton instance (`TPS.driverManager`).
8
+ */
9
+ export class DriverManager {
10
+ constructor() {
11
+ this.registry = new Map();
12
+ }
13
+ /**
14
+ * Registers a calendar driver.
15
+ * Overwrites any previously registered driver with the same code.
16
+ */
17
+ register(driver) {
18
+ if (!driver || !driver.code) {
19
+ throw new Error("DriverManager: driver must have a valid `code` string.");
20
+ }
21
+ this.registry.set(driver.code, driver);
22
+ }
23
+ /**
24
+ * Returns the driver registered for the given calendar code, or `undefined`.
25
+ */
26
+ get(code) {
27
+ return this.registry.get(code);
28
+ }
29
+ /**
30
+ * Returns `true` if a driver with the given code has been registered.
31
+ */
32
+ has(code) {
33
+ return this.registry.has(code);
34
+ }
35
+ /**
36
+ * Returns an array of all registered calendar codes.
37
+ */
38
+ list() {
39
+ return Array.from(this.registry.keys());
40
+ }
41
+ /**
42
+ * Removes a driver from the registry.
43
+ * Returns `true` if the driver existed and was removed.
44
+ */
45
+ unregister(code) {
46
+ return this.registry.delete(code);
47
+ }
48
+ }
49
+ //# sourceMappingURL=driver-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-manager.js","sourceRoot":"","sources":["../../src/driver-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,OAAO,aAAa;IAA1B;QACmB,aAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAyChE,CAAC;IAvCC;;;OAGG;IACH,QAAQ,CAAC,MAAsB;QAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -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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"}