@intech-software/chronera 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/local-date.d.ts +1 -0
- package/dist/core/local-date.js +1 -0
- package/dist/core/local-date.js.map +1 -1
- package/dist/format/format-pattern.js +97 -2
- package/dist/format/format-pattern.js.map +1 -1
- package/dist/format/pattern-scanner.js +9 -0
- package/dist/format/pattern-scanner.js.map +1 -1
- package/dist/holidays/countries/ae.d.ts +6 -0
- package/dist/holidays/countries/ae.js +70 -0
- package/dist/holidays/countries/ae.js.map +1 -0
- package/dist/holidays/countries/au.d.ts +6 -0
- package/dist/holidays/countries/au.js +79 -0
- package/dist/holidays/countries/au.js.map +1 -0
- package/dist/holidays/countries/cn.d.ts +6 -0
- package/dist/holidays/countries/cn.js +57 -0
- package/dist/holidays/countries/cn.js.map +1 -0
- package/dist/holidays/countries/de.d.ts +6 -0
- package/dist/holidays/countries/de.js +81 -0
- package/dist/holidays/countries/de.js.map +1 -0
- package/dist/holidays/countries/fr.d.ts +6 -0
- package/dist/holidays/countries/fr.js +97 -0
- package/dist/holidays/countries/fr.js.map +1 -0
- package/dist/holidays/countries/gb.d.ts +6 -0
- package/dist/holidays/countries/gb.js +80 -0
- package/dist/holidays/countries/gb.js.map +1 -0
- package/dist/holidays/countries/hk.d.ts +6 -0
- package/dist/holidays/countries/hk.js +87 -0
- package/dist/holidays/countries/hk.js.map +1 -0
- package/dist/holidays/countries/in.d.ts +6 -0
- package/dist/holidays/countries/in.js +52 -0
- package/dist/holidays/countries/in.js.map +1 -0
- package/dist/holidays/countries/index.d.ts +18 -0
- package/dist/holidays/countries/index.js +34 -0
- package/dist/holidays/countries/index.js.map +1 -0
- package/dist/holidays/countries/ir.d.ts +7 -0
- package/dist/holidays/countries/ir.js +93 -0
- package/dist/holidays/countries/ir.js.map +1 -0
- package/dist/holidays/countries/jp.d.ts +6 -0
- package/dist/holidays/countries/jp.js +140 -0
- package/dist/holidays/countries/jp.js.map +1 -0
- package/dist/holidays/countries/sa.d.ts +7 -0
- package/dist/holidays/countries/sa.js +56 -0
- package/dist/holidays/countries/sa.js.map +1 -0
- package/dist/holidays/countries/sg.d.ts +6 -0
- package/dist/holidays/countries/sg.js +71 -0
- package/dist/holidays/countries/sg.js.map +1 -0
- package/dist/holidays/countries/th.d.ts +6 -0
- package/dist/holidays/countries/th.js +151 -0
- package/dist/holidays/countries/th.js.map +1 -0
- package/dist/holidays/countries/tw.d.ts +6 -0
- package/dist/holidays/countries/tw.js +57 -0
- package/dist/holidays/countries/tw.js.map +1 -0
- package/dist/holidays/countries/us.d.ts +6 -0
- package/dist/holidays/countries/us.js +112 -0
- package/dist/holidays/countries/us.js.map +1 -0
- package/dist/holidays/easter.d.ts +23 -0
- package/dist/holidays/easter.js +49 -0
- package/dist/holidays/easter.js.map +1 -0
- package/dist/holidays/index.d.ts +5 -0
- package/dist/holidays/index.js +6 -0
- package/dist/holidays/index.js.map +1 -0
- package/dist/holidays/registry.d.ts +14 -0
- package/dist/holidays/registry.js +79 -0
- package/dist/holidays/registry.js.map +1 -0
- package/dist/holidays/rules/easter-rule.d.ts +5 -0
- package/dist/holidays/rules/easter-rule.js +26 -0
- package/dist/holidays/rules/easter-rule.js.map +1 -0
- package/dist/holidays/rules/fixed-rule.d.ts +5 -0
- package/dist/holidays/rules/fixed-rule.js +72 -0
- package/dist/holidays/rules/fixed-rule.js.map +1 -0
- package/dist/holidays/rules/floating-rule.d.ts +6 -0
- package/dist/holidays/rules/floating-rule.js +53 -0
- package/dist/holidays/rules/floating-rule.js.map +1 -0
- package/dist/holidays/rules/hijri-rule.d.ts +6 -0
- package/dist/holidays/rules/hijri-rule.js +44 -0
- package/dist/holidays/rules/hijri-rule.js.map +1 -0
- package/dist/holidays/rules/index.d.ts +9 -0
- package/dist/holidays/rules/index.js +26 -0
- package/dist/holidays/rules/index.js.map +1 -0
- package/dist/holidays/types.d.ts +106 -0
- package/dist/holidays/types.js +2 -0
- package/dist/holidays/types.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/operations/business-days.d.ts +30 -14
- package/dist/operations/business-days.js +115 -37
- package/dist/operations/business-days.js.map +1 -1
- package/dist/operations/holidays.d.ts +15 -0
- package/dist/operations/holidays.js +36 -0
- package/dist/operations/holidays.js.map +1 -0
- package/dist/operations/timezone.d.ts +28 -0
- package/dist/operations/timezone.js +120 -0
- package/dist/operations/timezone.js.map +1 -0
- package/dist/public-types.d.ts +16 -0
- package/dist/public-types.js.map +1 -1
- package/package.json +10 -1
package/dist/core/local-date.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-date.js","sourceRoot":"","sources":["../../src/core/local-date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW;IAChE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/B,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE3B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,aAAa,CACrB,uBAAuB,EACvB,uDAAuD,IAAI,GAAG,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,aAAa,CACrB,uBAAuB,EACvB,eAAe,GAAG,wBAAwB,KAAK,YAAY,IAAI,GAAG,CACnE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI;QACJ,KAAK;QACL,GAAG;KACJ,CAAC;AACJ,CAAC","sourcesContent":["import { ChroneraError } from \"../errors/errors.js\";\nimport { daysInGregorianMonth } from \"./gregorian-math.js\";\nimport { requireInteger } from \"./integer.js\";\n\nimport type { LocalDate } from \"../public-types.js\";\n\nexport function localDate(year: number, month: number, day: number): LocalDate {\n requireInteger(\"year\", year);\n requireInteger(\"month\", month);\n requireInteger(\"day\", day);\n\n if (year < 1 || year > 9999) {\n throw new ChroneraError(\n \"CHRONERA_OUT_OF_RANGE\",\n `Gregorian year must be between 1 and 9999; received ${year}.`,\n );\n }\n\n const maximumDay = daysInGregorianMonth(year, month);\n\n if (day < 1 || day > maximumDay) {\n throw new ChroneraError(\n \"CHRONERA_INVALID_DATE\",\n `Invalid day ${day} for Gregorian month ${month} in year ${year}.`,\n );\n }\n\n return {\n kind: \"local-date\",\n year,\n month,\n day,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"local-date.js","sourceRoot":"","sources":["../../src/core/local-date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW;IAChE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/B,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE3B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,aAAa,CACrB,uBAAuB,EACvB,uDAAuD,IAAI,GAAG,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,aAAa,CACrB,uBAAuB,EACvB,eAAe,GAAG,wBAAwB,KAAK,YAAY,IAAI,GAAG,CACnE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI;QACJ,KAAK;QACL,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC","sourcesContent":["import { ChroneraError } from \"../errors/errors.js\";\nimport { daysInGregorianMonth } from \"./gregorian-math.js\";\nimport { requireInteger } from \"./integer.js\";\n\nimport type { LocalDate } from \"../public-types.js\";\n\nexport function localDate(year: number, month: number, day: number): LocalDate {\n requireInteger(\"year\", year);\n requireInteger(\"month\", month);\n requireInteger(\"day\", day);\n\n if (year < 1 || year > 9999) {\n throw new ChroneraError(\n \"CHRONERA_OUT_OF_RANGE\",\n `Gregorian year must be between 1 and 9999; received ${year}.`,\n );\n }\n\n const maximumDay = daysInGregorianMonth(year, month);\n\n if (day < 1 || day > maximumDay) {\n throw new ChroneraError(\n \"CHRONERA_INVALID_DATE\",\n `Invalid day ${day} for Gregorian month ${month} in year ${year}.`,\n );\n }\n\n return {\n kind: \"local-date\",\n year,\n month,\n day,\n };\n}\n\nexport const createLocalDate = localDate;\n"]}
|
|
@@ -7,6 +7,47 @@ import { absoluteDayFromGregorianFields } from "../core/absolute-day.js";
|
|
|
7
7
|
import { getDayOfYearFromAbsoluteDay } from "../core/day-of-year.js";
|
|
8
8
|
import { getIsoDayOfWeek, getIsoWeekFromAbsoluteDay, } from "../core/iso-week.js";
|
|
9
9
|
import { ChroneraError } from "../errors/errors.js";
|
|
10
|
+
function formatIsoOffset(offsetStr, token) {
|
|
11
|
+
if (offsetStr === "Z" || offsetStr === "+00:00" || offsetStr === "-00:00") {
|
|
12
|
+
switch (token) {
|
|
13
|
+
case "X":
|
|
14
|
+
case "XX":
|
|
15
|
+
case "XXX":
|
|
16
|
+
return "Z";
|
|
17
|
+
case "x":
|
|
18
|
+
return "+00";
|
|
19
|
+
case "xx":
|
|
20
|
+
return "+0000";
|
|
21
|
+
case "xxx":
|
|
22
|
+
return "+00:00";
|
|
23
|
+
default:
|
|
24
|
+
return "Z";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const m = offsetStr.match(/^([+-])(\d{2}):(\d{2})$/);
|
|
28
|
+
if (!m) {
|
|
29
|
+
return offsetStr;
|
|
30
|
+
}
|
|
31
|
+
const sign = m[1];
|
|
32
|
+
const h = m[2];
|
|
33
|
+
const min = m[3];
|
|
34
|
+
switch (token) {
|
|
35
|
+
case "X":
|
|
36
|
+
return min === "00" ? `${sign}${h}` : `${sign}${h}${min}`;
|
|
37
|
+
case "XX":
|
|
38
|
+
return `${sign}${h}${min}`;
|
|
39
|
+
case "XXX":
|
|
40
|
+
return `${sign}${h}:${min}`;
|
|
41
|
+
case "x":
|
|
42
|
+
return min === "00" ? `${sign}${h}` : `${sign}${h}${min}`;
|
|
43
|
+
case "xx":
|
|
44
|
+
return `${sign}${h}${min}`;
|
|
45
|
+
case "xxx":
|
|
46
|
+
return `${sign}${h}:${min}`;
|
|
47
|
+
default:
|
|
48
|
+
return offsetStr;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
10
51
|
export function formatWithPatternWithRegistry(registry, input, pattern, options = {}) {
|
|
11
52
|
const tokens = scanPattern(pattern);
|
|
12
53
|
const localeInfo = validateAndResolveLocale(options.locale);
|
|
@@ -26,6 +67,8 @@ export function formatWithPatternWithRegistry(registry, input, pattern, options
|
|
|
26
67
|
let second = 0;
|
|
27
68
|
let millisecond = 0;
|
|
28
69
|
let offsetString = "Z";
|
|
70
|
+
let resolvedInstant;
|
|
71
|
+
let tzId = "UTC";
|
|
29
72
|
if (isLocalDateTime && localDt) {
|
|
30
73
|
calDate = {
|
|
31
74
|
kind: "calendar-date",
|
|
@@ -48,8 +91,10 @@ export function formatWithPatternWithRegistry(registry, input, pattern, options
|
|
|
48
91
|
calDate = resolved.calendarDate;
|
|
49
92
|
absDay = resolved.absoluteDay;
|
|
50
93
|
if (resolved.instant) {
|
|
94
|
+
resolvedInstant = resolved.instant;
|
|
95
|
+
tzId = resolved.timeZone ?? "UTC";
|
|
51
96
|
const date = new Date(resolved.instant.epochMilliseconds);
|
|
52
|
-
const tz =
|
|
97
|
+
const tz = tzId;
|
|
53
98
|
// Project fields using Intl
|
|
54
99
|
const dtf = new Intl.DateTimeFormat("en-US", {
|
|
55
100
|
timeZone: tz,
|
|
@@ -81,6 +126,43 @@ export function formatWithPatternWithRegistry(registry, input, pattern, options
|
|
|
81
126
|
millisecond = ((resolved.instant.epochMilliseconds % 1000) + 1000) % 1000;
|
|
82
127
|
}
|
|
83
128
|
}
|
|
129
|
+
let tzShortName;
|
|
130
|
+
let tzLongName;
|
|
131
|
+
const getTzShort = () => {
|
|
132
|
+
if (tzShortName !== undefined)
|
|
133
|
+
return tzShortName;
|
|
134
|
+
if (!resolvedInstant) {
|
|
135
|
+
tzShortName = offsetString === "Z" ? "UTC" : offsetString;
|
|
136
|
+
return tzShortName;
|
|
137
|
+
}
|
|
138
|
+
const d = new Date(resolvedInstant.epochMilliseconds);
|
|
139
|
+
const parts = new Intl.DateTimeFormat(locale, {
|
|
140
|
+
timeZone: tzId,
|
|
141
|
+
timeZoneName: "short",
|
|
142
|
+
}).formatToParts(d);
|
|
143
|
+
const p = parts.find((part) => part.type === "timeZoneName");
|
|
144
|
+
tzShortName = p?.value ?? (offsetString === "Z" ? "UTC" : offsetString);
|
|
145
|
+
return tzShortName;
|
|
146
|
+
};
|
|
147
|
+
const getTzLong = () => {
|
|
148
|
+
if (tzLongName !== undefined)
|
|
149
|
+
return tzLongName;
|
|
150
|
+
if (!resolvedInstant) {
|
|
151
|
+
tzLongName =
|
|
152
|
+
offsetString === "Z" ? "Coordinated Universal Time" : offsetString;
|
|
153
|
+
return tzLongName;
|
|
154
|
+
}
|
|
155
|
+
const d = new Date(resolvedInstant.epochMilliseconds);
|
|
156
|
+
const parts = new Intl.DateTimeFormat(locale, {
|
|
157
|
+
timeZone: tzId,
|
|
158
|
+
timeZoneName: "long",
|
|
159
|
+
}).formatToParts(d);
|
|
160
|
+
const p = parts.find((part) => part.type === "timeZoneName");
|
|
161
|
+
tzLongName =
|
|
162
|
+
p?.value ??
|
|
163
|
+
(offsetString === "Z" ? "Coordinated Universal Time" : offsetString);
|
|
164
|
+
return tzLongName;
|
|
165
|
+
};
|
|
84
166
|
const month = calDate.month ?? Number.parseInt(calDate.monthCode.slice(1), 10);
|
|
85
167
|
const year = calDate.eraYear ?? calDate.year;
|
|
86
168
|
// Helper for localized text
|
|
@@ -200,8 +282,21 @@ export function formatWithPatternWithRegistry(registry, input, pattern, options
|
|
|
200
282
|
case "SSS":
|
|
201
283
|
out += formatNumberWithSystem(String(millisecond).padStart(3, "0"), numberingSystem);
|
|
202
284
|
break;
|
|
285
|
+
case "X":
|
|
286
|
+
case "XX":
|
|
203
287
|
case "XXX":
|
|
204
|
-
|
|
288
|
+
case "x":
|
|
289
|
+
case "xx":
|
|
290
|
+
case "xxx":
|
|
291
|
+
out += formatIsoOffset(offsetString, t.symbol);
|
|
292
|
+
break;
|
|
293
|
+
case "z":
|
|
294
|
+
case "zz":
|
|
295
|
+
case "zzz":
|
|
296
|
+
out += getTzShort();
|
|
297
|
+
break;
|
|
298
|
+
case "zzzz":
|
|
299
|
+
out += getTzLong();
|
|
205
300
|
break;
|
|
206
301
|
case "Q": {
|
|
207
302
|
const qNum = Math.floor((month - 1) / 3) + 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-pattern.js","sourceRoot":"","sources":["../../src/format/format-pattern.ts"],"names":[],"mappings":"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","sourcesContent":["import { scanPattern } from \"./pattern-scanner.js\";\nimport { formatNumberWithSystem } from \"../locale/numbering-system.js\";\nimport { resolveDateFormattingInput } from \"./resolve-date-input.js\";\nimport { defaultCalendarRegistry } from \"../calendar/registry.js\";\nimport { validateAndResolveLocale } from \"../locale/resolve-locale.js\";\nimport { absoluteDayFromGregorianFields } from \"../core/absolute-day.js\";\nimport { getDayOfYearFromAbsoluteDay } from \"../core/day-of-year.js\";\nimport {\n getIsoDayOfWeek,\n getIsoWeekFromAbsoluteDay,\n} from \"../core/iso-week.js\";\nimport { ChroneraError } from \"../errors/errors.js\";\n\nimport type { CalendarRegistry } from \"../calendar/registry.js\";\nimport type {\n CalendarDate,\n FormatDateInput,\n LocalDateTime,\n PatternFormatOptions,\n} from \"../public-types.js\";\n\nexport function formatWithPatternWithRegistry(\n registry: CalendarRegistry,\n input: FormatDateInput | LocalDateTime,\n pattern: string,\n options: Readonly<PatternFormatOptions> = {},\n): string {\n const tokens = scanPattern(pattern);\n const localeInfo = validateAndResolveLocale(options.locale);\n const locale = localeInfo.baseLocale;\n const numberingSystem = options.numberingSystem ?? \"latn\";\n\n // Check if input is LocalDateTime\n let isLocalDateTime = false;\n let localDt: LocalDateTime | undefined;\n if (\"kind\" in input && input.kind === \"local-date-time\") {\n isLocalDateTime = true;\n localDt = input;\n }\n\n let calDate: CalendarDate;\n let absDay: number;\n let hour = 0;\n let minute = 0;\n let second = 0;\n let millisecond = 0;\n let offsetString = \"Z\";\n\n if (isLocalDateTime && localDt) {\n calDate = {\n kind: \"calendar-date\",\n calendar: \"gregory\",\n year: localDt.date.year,\n monthCode: `M${String(localDt.date.month).padStart(2, \"0\")}`,\n month: localDt.date.month,\n day: localDt.date.day,\n era: \"CE\",\n eraYear: localDt.date.year,\n };\n absDay = absoluteDayFromGregorianFields(\n localDt.date.year,\n localDt.date.month,\n localDt.date.day,\n );\n hour = localDt.time.hour;\n minute = localDt.time.minute;\n second = localDt.time.second;\n millisecond = localDt.time.millisecond;\n } else {\n const resolved = resolveDateFormattingInput(\n registry,\n input as FormatDateInput,\n options,\n );\n calDate = resolved.calendarDate;\n absDay = resolved.absoluteDay;\n\n if (resolved.instant) {\n const date = new Date(resolved.instant.epochMilliseconds);\n const tz = resolved.timeZone ?? \"UTC\";\n\n // Project fields using Intl\n const dtf = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: tz,\n hourCycle: \"h23\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n timeZoneName: \"longOffset\",\n });\n\n const parts = dtf.formatToParts(date);\n for (const p of parts) {\n if (p.type === \"hour\") hour = Number.parseInt(p.value, 10);\n if (p.type === \"minute\") minute = Number.parseInt(p.value, 10);\n if (p.type === \"second\") second = Number.parseInt(p.value, 10);\n if (p.type === \"timeZoneName\") {\n // e.g. \"GMT+07:00\" -> \"+07:00\"\n const m = p.value.match(/GMT([+-]\\d{2}:\\d{2})/);\n if (m && m[1]) {\n offsetString = m[1];\n } else if (p.value === \"GMT\") {\n offsetString = \"Z\";\n }\n }\n }\n millisecond = ((resolved.instant.epochMilliseconds % 1000) + 1000) % 1000;\n }\n }\n\n const month =\n calDate.month ?? Number.parseInt(calDate.monthCode.slice(1), 10);\n const year = calDate.eraYear ?? calDate.year;\n\n // Helper for localized text\n const localizedDate = new Date(\n Date.UTC(calDate.year, month - 1, calDate.day),\n );\n\n let out = \"\";\n for (const t of tokens) {\n if (t.type === \"literal\") {\n out += t.value;\n continue;\n }\n\n switch (t.symbol) {\n case \"y\":\n out += formatNumberWithSystem(year, numberingSystem);\n break;\n case \"yy\":\n out += formatNumberWithSystem(\n String(year % 100).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"yyyy\":\n out += formatNumberWithSystem(\n String(year).padStart(4, \"0\"),\n numberingSystem,\n );\n break;\n case \"M\":\n out += formatNumberWithSystem(month, numberingSystem);\n break;\n case \"MM\":\n out += formatNumberWithSystem(\n String(month).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"MMM\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n month: \"short\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"MMMM\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n month: \"long\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"d\":\n out += formatNumberWithSystem(calDate.day, numberingSystem);\n break;\n case \"dd\":\n out += formatNumberWithSystem(\n String(calDate.day).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"E\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n weekday: \"short\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"EEEE\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n weekday: \"long\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"G\":\n out += calDate.era ?? (year >= 0 ? \"AD\" : \"BC\");\n break;\n case \"GGGG\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n era: \"long\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"H\":\n out += formatNumberWithSystem(hour, numberingSystem);\n break;\n case \"HH\":\n out += formatNumberWithSystem(\n String(hour).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"h\": {\n const h12 = hour % 12 === 0 ? 12 : hour % 12;\n out += formatNumberWithSystem(h12, numberingSystem);\n break;\n }\n case \"hh\": {\n const h12 = hour % 12 === 0 ? 12 : hour % 12;\n out += formatNumberWithSystem(\n String(h12).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n }\n case \"a\":\n out += hour < 12 ? \"AM\" : \"PM\";\n break;\n case \"m\":\n out += formatNumberWithSystem(minute, numberingSystem);\n break;\n case \"mm\":\n out += formatNumberWithSystem(\n String(minute).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"s\":\n out += formatNumberWithSystem(second, numberingSystem);\n break;\n case \"ss\":\n out += formatNumberWithSystem(\n String(second).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"S\": {\n const frac1 = Math.floor(millisecond / 100);\n out += formatNumberWithSystem(frac1, numberingSystem);\n break;\n }\n case \"SSS\":\n out += formatNumberWithSystem(\n String(millisecond).padStart(3, \"0\"),\n numberingSystem,\n );\n break;\n case \"XXX\":\n out += offsetString === \"+00:00\" ? \"Z\" : offsetString;\n break;\n case \"Q\": {\n const qNum = Math.floor((month - 1) / 3) + 1;\n out += formatNumberWithSystem(qNum, numberingSystem);\n break;\n }\n case \"QQQ\": {\n const qNum = Math.floor((month - 1) / 3) + 1;\n out += `Q${formatNumberWithSystem(qNum, numberingSystem)}`;\n break;\n }\n case \"QQQQ\": {\n const qIndex = Math.floor((month - 1) / 3);\n const qNames = [\n \"1st quarter\",\n \"2nd quarter\",\n \"3rd quarter\",\n \"4th quarter\",\n ];\n out += qNames[qIndex]!;\n break;\n }\n case \"D\": {\n const doy = getDayOfYearFromAbsoluteDay(absDay).dayOfYear;\n out += formatNumberWithSystem(doy, numberingSystem);\n break;\n }\n case \"DDD\": {\n const doy = getDayOfYearFromAbsoluteDay(absDay).dayOfYear;\n out += formatNumberWithSystem(\n String(doy).padStart(3, \"0\"),\n numberingSystem,\n );\n break;\n }\n case \"w\": {\n const wn = getIsoWeekFromAbsoluteDay(absDay).weekNumber;\n out += formatNumberWithSystem(wn, numberingSystem);\n break;\n }\n case \"ww\": {\n const wn = getIsoWeekFromAbsoluteDay(absDay).weekNumber;\n out += formatNumberWithSystem(\n String(wn).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n }\n case \"e\": {\n const dow = getIsoDayOfWeek(absDay);\n out += formatNumberWithSystem(dow, numberingSystem);\n break;\n }\n case \"ee\": {\n const dow = getIsoDayOfWeek(absDay);\n out += formatNumberWithSystem(\n String(dow).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n }\n default:\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n `Unhandled pattern symbol: ${t.symbol}`,\n );\n }\n }\n\n return out;\n}\n\nexport function formatWithPattern(\n input: FormatDateInput | LocalDateTime,\n pattern: string,\n options?: Readonly<PatternFormatOptions>,\n): string {\n return formatWithPatternWithRegistry(\n defaultCalendarRegistry,\n input,\n pattern,\n options,\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"format-pattern.js","sourceRoot":"","sources":["../../src/format/format-pattern.ts"],"names":[],"mappings":"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","sourcesContent":["import { scanPattern } from \"./pattern-scanner.js\";\nimport { formatNumberWithSystem } from \"../locale/numbering-system.js\";\nimport { resolveDateFormattingInput } from \"./resolve-date-input.js\";\nimport { defaultCalendarRegistry } from \"../calendar/registry.js\";\nimport { validateAndResolveLocale } from \"../locale/resolve-locale.js\";\nimport { absoluteDayFromGregorianFields } from \"../core/absolute-day.js\";\nimport { getDayOfYearFromAbsoluteDay } from \"../core/day-of-year.js\";\nimport {\n getIsoDayOfWeek,\n getIsoWeekFromAbsoluteDay,\n} from \"../core/iso-week.js\";\nimport { ChroneraError } from \"../errors/errors.js\";\n\nimport type { CalendarRegistry } from \"../calendar/registry.js\";\nimport type {\n CalendarDate,\n FormatDateInput,\n Instant,\n LocalDateTime,\n PatternFormatOptions,\n} from \"../public-types.js\";\n\nfunction formatIsoOffset(offsetStr: string, token: string): string {\n if (offsetStr === \"Z\" || offsetStr === \"+00:00\" || offsetStr === \"-00:00\") {\n switch (token) {\n case \"X\":\n case \"XX\":\n case \"XXX\":\n return \"Z\";\n case \"x\":\n return \"+00\";\n case \"xx\":\n return \"+0000\";\n case \"xxx\":\n return \"+00:00\";\n default:\n return \"Z\";\n }\n }\n\n const m = offsetStr.match(/^([+-])(\\d{2}):(\\d{2})$/);\n if (!m) {\n return offsetStr;\n }\n const sign = m[1]!;\n const h = m[2]!;\n const min = m[3]!;\n\n switch (token) {\n case \"X\":\n return min === \"00\" ? `${sign}${h}` : `${sign}${h}${min}`;\n case \"XX\":\n return `${sign}${h}${min}`;\n case \"XXX\":\n return `${sign}${h}:${min}`;\n case \"x\":\n return min === \"00\" ? `${sign}${h}` : `${sign}${h}${min}`;\n case \"xx\":\n return `${sign}${h}${min}`;\n case \"xxx\":\n return `${sign}${h}:${min}`;\n default:\n return offsetStr;\n }\n}\n\nexport function formatWithPatternWithRegistry(\n registry: CalendarRegistry,\n input: FormatDateInput | LocalDateTime,\n pattern: string,\n options: Readonly<PatternFormatOptions> = {},\n): string {\n const tokens = scanPattern(pattern);\n const localeInfo = validateAndResolveLocale(options.locale);\n const locale = localeInfo.baseLocale;\n const numberingSystem = options.numberingSystem ?? \"latn\";\n\n // Check if input is LocalDateTime\n let isLocalDateTime = false;\n let localDt: LocalDateTime | undefined;\n if (\"kind\" in input && input.kind === \"local-date-time\") {\n isLocalDateTime = true;\n localDt = input;\n }\n\n let calDate: CalendarDate;\n let absDay: number;\n let hour = 0;\n let minute = 0;\n let second = 0;\n let millisecond = 0;\n let offsetString = \"Z\";\n let resolvedInstant: Instant | undefined;\n let tzId = \"UTC\";\n\n if (isLocalDateTime && localDt) {\n calDate = {\n kind: \"calendar-date\",\n calendar: \"gregory\",\n year: localDt.date.year,\n monthCode: `M${String(localDt.date.month).padStart(2, \"0\")}`,\n month: localDt.date.month,\n day: localDt.date.day,\n era: \"CE\",\n eraYear: localDt.date.year,\n };\n absDay = absoluteDayFromGregorianFields(\n localDt.date.year,\n localDt.date.month,\n localDt.date.day,\n );\n hour = localDt.time.hour;\n minute = localDt.time.minute;\n second = localDt.time.second;\n millisecond = localDt.time.millisecond;\n } else {\n const resolved = resolveDateFormattingInput(\n registry,\n input as FormatDateInput,\n options,\n );\n calDate = resolved.calendarDate;\n absDay = resolved.absoluteDay;\n\n if (resolved.instant) {\n resolvedInstant = resolved.instant;\n tzId = resolved.timeZone ?? \"UTC\";\n const date = new Date(resolved.instant.epochMilliseconds);\n const tz = tzId;\n\n // Project fields using Intl\n const dtf = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: tz,\n hourCycle: \"h23\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n timeZoneName: \"longOffset\",\n });\n\n const parts = dtf.formatToParts(date);\n for (const p of parts) {\n if (p.type === \"hour\") hour = Number.parseInt(p.value, 10);\n if (p.type === \"minute\") minute = Number.parseInt(p.value, 10);\n if (p.type === \"second\") second = Number.parseInt(p.value, 10);\n if (p.type === \"timeZoneName\") {\n // e.g. \"GMT+07:00\" -> \"+07:00\"\n const m = p.value.match(/GMT([+-]\\d{2}:\\d{2})/);\n if (m && m[1]) {\n offsetString = m[1];\n } else if (p.value === \"GMT\") {\n offsetString = \"Z\";\n }\n }\n }\n millisecond = ((resolved.instant.epochMilliseconds % 1000) + 1000) % 1000;\n }\n }\n\n let tzShortName: string | undefined;\n let tzLongName: string | undefined;\n\n const getTzShort = (): string => {\n if (tzShortName !== undefined) return tzShortName;\n if (!resolvedInstant) {\n tzShortName = offsetString === \"Z\" ? \"UTC\" : offsetString;\n return tzShortName;\n }\n const d = new Date(resolvedInstant.epochMilliseconds);\n const parts = new Intl.DateTimeFormat(locale, {\n timeZone: tzId,\n timeZoneName: \"short\",\n }).formatToParts(d);\n const p = parts.find((part) => part.type === \"timeZoneName\");\n tzShortName = p?.value ?? (offsetString === \"Z\" ? \"UTC\" : offsetString);\n return tzShortName;\n };\n\n const getTzLong = (): string => {\n if (tzLongName !== undefined) return tzLongName;\n if (!resolvedInstant) {\n tzLongName =\n offsetString === \"Z\" ? \"Coordinated Universal Time\" : offsetString;\n return tzLongName;\n }\n const d = new Date(resolvedInstant.epochMilliseconds);\n const parts = new Intl.DateTimeFormat(locale, {\n timeZone: tzId,\n timeZoneName: \"long\",\n }).formatToParts(d);\n const p = parts.find((part) => part.type === \"timeZoneName\");\n tzLongName =\n p?.value ??\n (offsetString === \"Z\" ? \"Coordinated Universal Time\" : offsetString);\n return tzLongName;\n };\n\n const month =\n calDate.month ?? Number.parseInt(calDate.monthCode.slice(1), 10);\n const year = calDate.eraYear ?? calDate.year;\n\n // Helper for localized text\n const localizedDate = new Date(\n Date.UTC(calDate.year, month - 1, calDate.day),\n );\n\n let out = \"\";\n for (const t of tokens) {\n if (t.type === \"literal\") {\n out += t.value;\n continue;\n }\n\n switch (t.symbol) {\n case \"y\":\n out += formatNumberWithSystem(year, numberingSystem);\n break;\n case \"yy\":\n out += formatNumberWithSystem(\n String(year % 100).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"yyyy\":\n out += formatNumberWithSystem(\n String(year).padStart(4, \"0\"),\n numberingSystem,\n );\n break;\n case \"M\":\n out += formatNumberWithSystem(month, numberingSystem);\n break;\n case \"MM\":\n out += formatNumberWithSystem(\n String(month).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"MMM\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n month: \"short\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"MMMM\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n month: \"long\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"d\":\n out += formatNumberWithSystem(calDate.day, numberingSystem);\n break;\n case \"dd\":\n out += formatNumberWithSystem(\n String(calDate.day).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"E\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n weekday: \"short\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"EEEE\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n weekday: \"long\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"G\":\n out += calDate.era ?? (year >= 0 ? \"AD\" : \"BC\");\n break;\n case \"GGGG\": {\n const dtf = new Intl.DateTimeFormat(locale, {\n calendar: calDate.calendar,\n era: \"long\",\n timeZone: \"UTC\",\n });\n out += dtf.format(localizedDate);\n break;\n }\n case \"H\":\n out += formatNumberWithSystem(hour, numberingSystem);\n break;\n case \"HH\":\n out += formatNumberWithSystem(\n String(hour).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"h\": {\n const h12 = hour % 12 === 0 ? 12 : hour % 12;\n out += formatNumberWithSystem(h12, numberingSystem);\n break;\n }\n case \"hh\": {\n const h12 = hour % 12 === 0 ? 12 : hour % 12;\n out += formatNumberWithSystem(\n String(h12).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n }\n case \"a\":\n out += hour < 12 ? \"AM\" : \"PM\";\n break;\n case \"m\":\n out += formatNumberWithSystem(minute, numberingSystem);\n break;\n case \"mm\":\n out += formatNumberWithSystem(\n String(minute).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"s\":\n out += formatNumberWithSystem(second, numberingSystem);\n break;\n case \"ss\":\n out += formatNumberWithSystem(\n String(second).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n case \"S\": {\n const frac1 = Math.floor(millisecond / 100);\n out += formatNumberWithSystem(frac1, numberingSystem);\n break;\n }\n case \"SSS\":\n out += formatNumberWithSystem(\n String(millisecond).padStart(3, \"0\"),\n numberingSystem,\n );\n break;\n case \"X\":\n case \"XX\":\n case \"XXX\":\n case \"x\":\n case \"xx\":\n case \"xxx\":\n out += formatIsoOffset(offsetString, t.symbol);\n break;\n case \"z\":\n case \"zz\":\n case \"zzz\":\n out += getTzShort();\n break;\n case \"zzzz\":\n out += getTzLong();\n break;\n case \"Q\": {\n const qNum = Math.floor((month - 1) / 3) + 1;\n out += formatNumberWithSystem(qNum, numberingSystem);\n break;\n }\n case \"QQQ\": {\n const qNum = Math.floor((month - 1) / 3) + 1;\n out += `Q${formatNumberWithSystem(qNum, numberingSystem)}`;\n break;\n }\n case \"QQQQ\": {\n const qIndex = Math.floor((month - 1) / 3);\n const qNames = [\n \"1st quarter\",\n \"2nd quarter\",\n \"3rd quarter\",\n \"4th quarter\",\n ];\n out += qNames[qIndex]!;\n break;\n }\n case \"D\": {\n const doy = getDayOfYearFromAbsoluteDay(absDay).dayOfYear;\n out += formatNumberWithSystem(doy, numberingSystem);\n break;\n }\n case \"DDD\": {\n const doy = getDayOfYearFromAbsoluteDay(absDay).dayOfYear;\n out += formatNumberWithSystem(\n String(doy).padStart(3, \"0\"),\n numberingSystem,\n );\n break;\n }\n case \"w\": {\n const wn = getIsoWeekFromAbsoluteDay(absDay).weekNumber;\n out += formatNumberWithSystem(wn, numberingSystem);\n break;\n }\n case \"ww\": {\n const wn = getIsoWeekFromAbsoluteDay(absDay).weekNumber;\n out += formatNumberWithSystem(\n String(wn).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n }\n case \"e\": {\n const dow = getIsoDayOfWeek(absDay);\n out += formatNumberWithSystem(dow, numberingSystem);\n break;\n }\n case \"ee\": {\n const dow = getIsoDayOfWeek(absDay);\n out += formatNumberWithSystem(\n String(dow).padStart(2, \"0\"),\n numberingSystem,\n );\n break;\n }\n default:\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n `Unhandled pattern symbol: ${t.symbol}`,\n );\n }\n }\n\n return out;\n}\n\nexport function formatWithPattern(\n input: FormatDateInput | LocalDateTime,\n pattern: string,\n options?: Readonly<PatternFormatOptions>,\n): string {\n return formatWithPatternWithRegistry(\n defaultCalendarRegistry,\n input,\n pattern,\n options,\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-scanner.js","sourceRoot":"","sources":["../../src/format/pattern-scanner.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChroneraError } from \"../errors/errors.js\";\n\nexport type PatternToken =\n { type: \"token\"; symbol: string } | { type: \"literal\"; value: string };\n\nconst VALID_PATTERN_TOKENS = new Set([\n \"y\",\n \"yy\",\n \"yyyy\",\n \"M\",\n \"MM\",\n \"MMM\",\n \"MMMM\",\n \"d\",\n \"dd\",\n \"E\",\n \"EEEE\",\n \"G\",\n \"GGGG\",\n \"H\",\n \"HH\",\n \"h\",\n \"hh\",\n \"a\",\n \"m\",\n \"mm\",\n \"s\",\n \"ss\",\n \"S\",\n \"SSS\",\n \"XXX\",\n \"Q\",\n \"QQQ\",\n \"QQQQ\",\n \"D\",\n \"DDD\",\n \"w\",\n \"ww\",\n \"e\",\n \"ee\",\n]);\n\nexport function scanPattern(pattern: string): PatternToken[] {\n if (typeof pattern !== \"string\") {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n \"Pattern must be a string.\",\n );\n }\n\n if (pattern.length > 256) {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_LONG\",\n `Pattern length ${pattern.length} exceeds maximum limit of 256 code units.`,\n );\n }\n\n const tokens: PatternToken[] = [];\n let i = 0;\n\n while (i < pattern.length) {\n if (tokens.length >= 64) {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n \"Pattern token count exceeds maximum limit of 64 tokens.\",\n );\n }\n\n const ch = pattern[i]!;\n\n // Literal escaped in single quotes\n if (ch === \"'\") {\n i++;\n let literal = \"\";\n while (i < pattern.length) {\n if (pattern[i] === \"'\") {\n if (i + 1 < pattern.length && pattern[i + 1] === \"'\") {\n literal += \"'\";\n i += 2;\n } else {\n i++;\n break;\n }\n } else {\n literal += pattern[i];\n i++;\n }\n }\n tokens.push({ type: \"literal\", value: literal });\n }\n // Letters are tokens\n else if (/[A-Za-z]/.test(ch)) {\n let run = ch;\n i++;\n while (i < pattern.length && pattern[i] === ch) {\n run += pattern[i];\n i++;\n }\n if (!VALID_PATTERN_TOKENS.has(run)) {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n `Unsupported or unknown pattern token: \"${run}\".`,\n );\n }\n tokens.push({ type: \"token\", symbol: run });\n }\n // Non-letter characters outside quotes are treated as raw literals\n else {\n let literal = ch;\n i++;\n while (\n i < pattern.length &&\n pattern[i] !== \"'\" &&\n !/[A-Za-z]/.test(pattern[i]!)\n ) {\n literal += pattern[i];\n i++;\n }\n tokens.push({ type: \"literal\", value: literal });\n }\n }\n\n return tokens;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pattern-scanner.js","sourceRoot":"","sources":["../../src/format/pattern-scanner.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChroneraError } from \"../errors/errors.js\";\n\nexport type PatternToken =\n { type: \"token\"; symbol: string } | { type: \"literal\"; value: string };\n\nconst VALID_PATTERN_TOKENS = new Set([\n \"y\",\n \"yy\",\n \"yyyy\",\n \"M\",\n \"MM\",\n \"MMM\",\n \"MMMM\",\n \"d\",\n \"dd\",\n \"E\",\n \"EEEE\",\n \"G\",\n \"GGGG\",\n \"H\",\n \"HH\",\n \"h\",\n \"hh\",\n \"a\",\n \"m\",\n \"mm\",\n \"s\",\n \"ss\",\n \"S\",\n \"SSS\",\n \"X\",\n \"XX\",\n \"XXX\",\n \"x\",\n \"xx\",\n \"xxx\",\n \"z\",\n \"zz\",\n \"zzz\",\n \"zzzz\",\n \"Q\",\n \"QQQ\",\n \"QQQQ\",\n \"D\",\n \"DDD\",\n \"w\",\n \"ww\",\n \"e\",\n \"ee\",\n]);\n\nexport function scanPattern(pattern: string): PatternToken[] {\n if (typeof pattern !== \"string\") {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n \"Pattern must be a string.\",\n );\n }\n\n if (pattern.length > 256) {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_LONG\",\n `Pattern length ${pattern.length} exceeds maximum limit of 256 code units.`,\n );\n }\n\n const tokens: PatternToken[] = [];\n let i = 0;\n\n while (i < pattern.length) {\n if (tokens.length >= 64) {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n \"Pattern token count exceeds maximum limit of 64 tokens.\",\n );\n }\n\n const ch = pattern[i]!;\n\n // Literal escaped in single quotes\n if (ch === \"'\") {\n i++;\n let literal = \"\";\n while (i < pattern.length) {\n if (pattern[i] === \"'\") {\n if (i + 1 < pattern.length && pattern[i + 1] === \"'\") {\n literal += \"'\";\n i += 2;\n } else {\n i++;\n break;\n }\n } else {\n literal += pattern[i];\n i++;\n }\n }\n tokens.push({ type: \"literal\", value: literal });\n }\n // Letters are tokens\n else if (/[A-Za-z]/.test(ch)) {\n let run = ch;\n i++;\n while (i < pattern.length && pattern[i] === ch) {\n run += pattern[i];\n i++;\n }\n if (!VALID_PATTERN_TOKENS.has(run)) {\n throw new ChroneraError(\n \"CHRONERA_PATTERN_TOO_COMPLEX\",\n `Unsupported or unknown pattern token: \"${run}\".`,\n );\n }\n tokens.push({ type: \"token\", symbol: run });\n }\n // Non-letter characters outside quotes are treated as raw literals\n else {\n let literal = ch;\n i++;\n while (\n i < pattern.length &&\n pattern[i] !== \"'\" &&\n !/[A-Za-z]/.test(pattern[i]!)\n ) {\n literal += pattern[i];\n i++;\n }\n tokens.push({ type: \"literal\", value: literal });\n }\n }\n\n return tokens;\n}\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Official Public Holidays for the United Arab Emirates 🇦🇪
|
|
3
|
+
* Note: From Jan 1, 2022, UAE adopted Saturday & Sunday weekend.
|
|
4
|
+
*/
|
|
5
|
+
export const uaeHolidays = {
|
|
6
|
+
country: "AE",
|
|
7
|
+
countryName: "United Arab Emirates",
|
|
8
|
+
defaultWeekendDays: [6, 7], // Saturday, Sunday (post-2022)
|
|
9
|
+
rules: [
|
|
10
|
+
{
|
|
11
|
+
type: "fixed",
|
|
12
|
+
id: "ae-new-year",
|
|
13
|
+
month: 1,
|
|
14
|
+
day: 1,
|
|
15
|
+
name: "رأس السنة الميلادية",
|
|
16
|
+
nameEn: "New Year's Day",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: "fixed",
|
|
20
|
+
id: "ae-commemoration-day",
|
|
21
|
+
month: 12,
|
|
22
|
+
day: 1,
|
|
23
|
+
name: "يوم الشهيد",
|
|
24
|
+
nameEn: "Commemoration Day",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: "fixed",
|
|
28
|
+
id: "ae-national-day-1",
|
|
29
|
+
month: 12,
|
|
30
|
+
day: 2,
|
|
31
|
+
name: "اليوم الوطني",
|
|
32
|
+
nameEn: "UAE National Day",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: "fixed",
|
|
36
|
+
id: "ae-national-day-2",
|
|
37
|
+
month: 12,
|
|
38
|
+
day: 3,
|
|
39
|
+
name: "إجازة اليوم الوطني",
|
|
40
|
+
nameEn: "UAE National Day Holiday",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: "hijri",
|
|
44
|
+
id: "ae-eid-al-fitr",
|
|
45
|
+
hijriMonth: 10,
|
|
46
|
+
hijriDay: 1,
|
|
47
|
+
durationDays: 3,
|
|
48
|
+
name: "عيد الفطر",
|
|
49
|
+
nameEn: "Eid al-Fitr Holiday",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: "hijri",
|
|
53
|
+
id: "ae-arafah-day",
|
|
54
|
+
hijriMonth: 12,
|
|
55
|
+
hijriDay: 9,
|
|
56
|
+
name: "وقفة عرفة",
|
|
57
|
+
nameEn: "Arafah Day",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: "hijri",
|
|
61
|
+
id: "ae-eid-al-adha",
|
|
62
|
+
hijriMonth: 12,
|
|
63
|
+
hijriDay: 10,
|
|
64
|
+
durationDays: 3,
|
|
65
|
+
name: "عيد الأضحى",
|
|
66
|
+
nameEn: "Eid al-Adha Holiday",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=ae.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ae.js","sourceRoot":"","sources":["../../../src/holidays/countries/ae.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,sBAAsB;IACnC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,+BAA+B;IAC3D,KAAK,EAAE;QACL;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,gBAAgB;SACzB;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,mBAAmB;SAC5B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,kBAAkB;SAC3B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,0BAA0B;SACnC;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,gBAAgB;YACpB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,qBAAqB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,eAAe;YACnB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,YAAY;SACrB;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,gBAAgB;YACpB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,CAAC;YACf,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,qBAAqB;SAC9B;KACF;CACF,CAAC","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * Official Public Holidays for the United Arab Emirates 🇦🇪\n * Note: From Jan 1, 2022, UAE adopted Saturday & Sunday weekend.\n */\nexport const uaeHolidays: HolidayCalendar = {\n country: \"AE\",\n countryName: \"United Arab Emirates\",\n defaultWeekendDays: [6, 7], // Saturday, Sunday (post-2022)\n rules: [\n {\n type: \"fixed\",\n id: \"ae-new-year\",\n month: 1,\n day: 1,\n name: \"رأس السنة الميلادية\",\n nameEn: \"New Year's Day\",\n },\n {\n type: \"fixed\",\n id: \"ae-commemoration-day\",\n month: 12,\n day: 1,\n name: \"يوم الشهيد\",\n nameEn: \"Commemoration Day\",\n },\n {\n type: \"fixed\",\n id: \"ae-national-day-1\",\n month: 12,\n day: 2,\n name: \"اليوم الوطني\",\n nameEn: \"UAE National Day\",\n },\n {\n type: \"fixed\",\n id: \"ae-national-day-2\",\n month: 12,\n day: 3,\n name: \"إجازة اليوم الوطني\",\n nameEn: \"UAE National Day Holiday\",\n },\n {\n type: \"hijri\",\n id: \"ae-eid-al-fitr\",\n hijriMonth: 10,\n hijriDay: 1,\n durationDays: 3,\n name: \"عيد الفطر\",\n nameEn: \"Eid al-Fitr Holiday\",\n },\n {\n type: \"hijri\",\n id: \"ae-arafah-day\",\n hijriMonth: 12,\n hijriDay: 9,\n name: \"وقفة عرفة\",\n nameEn: \"Arafah Day\",\n },\n {\n type: \"hijri\",\n id: \"ae-eid-al-adha\",\n hijriMonth: 12,\n hijriDay: 10,\n durationDays: 3,\n name: \"عيد الأضحى\",\n nameEn: \"Eid al-Adha Holiday\",\n },\n ],\n};\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* National Public Holidays for Australia 🇦🇺
|
|
3
|
+
* Includes statutory national holidays and common nationwide bank holidays.
|
|
4
|
+
*/
|
|
5
|
+
export const australiaHolidays = {
|
|
6
|
+
country: "AU",
|
|
7
|
+
countryName: "Australia",
|
|
8
|
+
defaultWeekendDays: [6, 7],
|
|
9
|
+
rules: [
|
|
10
|
+
{
|
|
11
|
+
type: "fixed",
|
|
12
|
+
id: "au-new-year",
|
|
13
|
+
month: 1,
|
|
14
|
+
day: 1,
|
|
15
|
+
name: "New Year's Day",
|
|
16
|
+
nameEn: "New Year's Day",
|
|
17
|
+
observed: "weekend-to-monday",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: "fixed",
|
|
21
|
+
id: "au-australia-day",
|
|
22
|
+
month: 1,
|
|
23
|
+
day: 26,
|
|
24
|
+
name: "Australia Day",
|
|
25
|
+
nameEn: "Australia Day",
|
|
26
|
+
observed: "weekend-to-monday",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: "easter",
|
|
30
|
+
id: "au-good-friday",
|
|
31
|
+
offsetDays: -2,
|
|
32
|
+
name: "Good Friday",
|
|
33
|
+
nameEn: "Good Friday",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: "easter",
|
|
37
|
+
id: "au-easter-monday",
|
|
38
|
+
offsetDays: 1,
|
|
39
|
+
name: "Easter Monday",
|
|
40
|
+
nameEn: "Easter Monday",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: "fixed",
|
|
44
|
+
id: "au-anzac-day",
|
|
45
|
+
month: 4,
|
|
46
|
+
day: 25,
|
|
47
|
+
name: "ANZAC Day",
|
|
48
|
+
nameEn: "ANZAC Day",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: "floating",
|
|
52
|
+
id: "au-kings-birthday",
|
|
53
|
+
month: 6,
|
|
54
|
+
weekday: 1,
|
|
55
|
+
occurrence: 2, // 2nd Monday of June (most states)
|
|
56
|
+
name: "King's Birthday",
|
|
57
|
+
nameEn: "King's Birthday",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: "fixed",
|
|
61
|
+
id: "au-christmas",
|
|
62
|
+
month: 12,
|
|
63
|
+
day: 25,
|
|
64
|
+
name: "Christmas Day",
|
|
65
|
+
nameEn: "Christmas Day",
|
|
66
|
+
observed: "weekend-to-monday",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
type: "fixed",
|
|
70
|
+
id: "au-boxing-day",
|
|
71
|
+
month: 12,
|
|
72
|
+
day: 26,
|
|
73
|
+
name: "Boxing Day",
|
|
74
|
+
nameEn: "Boxing Day",
|
|
75
|
+
observed: "weekend-to-monday",
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=au.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"au.js","sourceRoot":"","sources":["../../../src/holidays/countries/au.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,WAAW;IACxB,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,KAAK,EAAE;QACL;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,gBAAgB;YACxB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,kBAAkB;YACtB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,gBAAgB;YACpB,UAAU,EAAE,CAAC,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,aAAa;SACtB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,kBAAkB;YACtB,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,eAAe;SACxB;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,WAAW;SACpB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,CAAC,EAAE,mCAAmC;YAClD,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,iBAAiB;SAC1B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,mBAAmB;SAC9B;KACF;CACF,CAAC","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * National Public Holidays for Australia 🇦🇺\n * Includes statutory national holidays and common nationwide bank holidays.\n */\nexport const australiaHolidays: HolidayCalendar = {\n country: \"AU\",\n countryName: \"Australia\",\n defaultWeekendDays: [6, 7],\n rules: [\n {\n type: \"fixed\",\n id: \"au-new-year\",\n month: 1,\n day: 1,\n name: \"New Year's Day\",\n nameEn: \"New Year's Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"au-australia-day\",\n month: 1,\n day: 26,\n name: \"Australia Day\",\n nameEn: \"Australia Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"easter\",\n id: \"au-good-friday\",\n offsetDays: -2,\n name: \"Good Friday\",\n nameEn: \"Good Friday\",\n },\n {\n type: \"easter\",\n id: \"au-easter-monday\",\n offsetDays: 1,\n name: \"Easter Monday\",\n nameEn: \"Easter Monday\",\n },\n {\n type: \"fixed\",\n id: \"au-anzac-day\",\n month: 4,\n day: 25,\n name: \"ANZAC Day\",\n nameEn: \"ANZAC Day\",\n },\n {\n type: \"floating\",\n id: \"au-kings-birthday\",\n month: 6,\n weekday: 1,\n occurrence: 2, // 2nd Monday of June (most states)\n name: \"King's Birthday\",\n nameEn: \"King's Birthday\",\n },\n {\n type: \"fixed\",\n id: \"au-christmas\",\n month: 12,\n day: 25,\n name: \"Christmas Day\",\n nameEn: \"Christmas Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"au-boxing-day\",\n month: 12,\n day: 26,\n name: \"Boxing Day\",\n nameEn: \"Boxing Day\",\n observed: \"weekend-to-monday\",\n },\n ],\n};\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statutory Solar Public Holidays for the People's Republic of China 🇨🇳
|
|
3
|
+
* 中华人民共和国法定节假日 (公历固定假期).
|
|
4
|
+
*/
|
|
5
|
+
export const chinaHolidays = {
|
|
6
|
+
country: "CN",
|
|
7
|
+
countryName: "China",
|
|
8
|
+
defaultWeekendDays: [6, 7],
|
|
9
|
+
rules: [
|
|
10
|
+
{
|
|
11
|
+
type: "fixed",
|
|
12
|
+
id: "cn-new-year",
|
|
13
|
+
month: 1,
|
|
14
|
+
day: 1,
|
|
15
|
+
name: "元旦",
|
|
16
|
+
nameEn: "New Year's Day",
|
|
17
|
+
observed: "weekend-to-monday",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: "fixed",
|
|
21
|
+
id: "cn-labor-day",
|
|
22
|
+
month: 5,
|
|
23
|
+
day: 1,
|
|
24
|
+
name: "劳动节",
|
|
25
|
+
nameEn: "International Labour Day",
|
|
26
|
+
observed: "weekend-to-monday",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: "fixed",
|
|
30
|
+
id: "cn-national-day-1",
|
|
31
|
+
month: 10,
|
|
32
|
+
day: 1,
|
|
33
|
+
name: "国庆节",
|
|
34
|
+
nameEn: "National Day",
|
|
35
|
+
observed: "weekend-to-monday",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: "fixed",
|
|
39
|
+
id: "cn-national-day-2",
|
|
40
|
+
month: 10,
|
|
41
|
+
day: 2,
|
|
42
|
+
name: "国庆节假期",
|
|
43
|
+
nameEn: "National Day Holiday Day 2",
|
|
44
|
+
observed: "weekend-to-monday",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
type: "fixed",
|
|
48
|
+
id: "cn-national-day-3",
|
|
49
|
+
month: 10,
|
|
50
|
+
day: 3,
|
|
51
|
+
name: "国庆节假期",
|
|
52
|
+
nameEn: "National Day Holiday Day 3",
|
|
53
|
+
observed: "weekend-to-monday",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=cn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.js","sourceRoot":"","sources":["../../../src/holidays/countries/cn.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,OAAO;IACpB,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,KAAK,EAAE;QACL;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,gBAAgB;YACxB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,0BAA0B;YAClC,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,cAAc;YACtB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,4BAA4B;YACpC,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,4BAA4B;YACpC,QAAQ,EAAE,mBAAmB;SAC9B;KACF;CACF,CAAC","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * Statutory Solar Public Holidays for the People's Republic of China 🇨🇳\n * 中华人民共和国法定节假日 (公历固定假期).\n */\nexport const chinaHolidays: HolidayCalendar = {\n country: \"CN\",\n countryName: \"China\",\n defaultWeekendDays: [6, 7],\n rules: [\n {\n type: \"fixed\",\n id: \"cn-new-year\",\n month: 1,\n day: 1,\n name: \"元旦\",\n nameEn: \"New Year's Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"cn-labor-day\",\n month: 5,\n day: 1,\n name: \"劳动节\",\n nameEn: \"International Labour Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"cn-national-day-1\",\n month: 10,\n day: 1,\n name: \"国庆节\",\n nameEn: \"National Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"cn-national-day-2\",\n month: 10,\n day: 2,\n name: \"国庆节假期\",\n nameEn: \"National Day Holiday Day 2\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"cn-national-day-3\",\n month: 10,\n day: 3,\n name: \"国庆节假期\",\n nameEn: \"National Day Holiday Day 3\",\n observed: \"weekend-to-monday\",\n },\n ],\n};\n"]}
|