@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.
Files changed (97) hide show
  1. package/dist/core/local-date.d.ts +1 -0
  2. package/dist/core/local-date.js +1 -0
  3. package/dist/core/local-date.js.map +1 -1
  4. package/dist/format/format-pattern.js +97 -2
  5. package/dist/format/format-pattern.js.map +1 -1
  6. package/dist/format/pattern-scanner.js +9 -0
  7. package/dist/format/pattern-scanner.js.map +1 -1
  8. package/dist/holidays/countries/ae.d.ts +6 -0
  9. package/dist/holidays/countries/ae.js +70 -0
  10. package/dist/holidays/countries/ae.js.map +1 -0
  11. package/dist/holidays/countries/au.d.ts +6 -0
  12. package/dist/holidays/countries/au.js +79 -0
  13. package/dist/holidays/countries/au.js.map +1 -0
  14. package/dist/holidays/countries/cn.d.ts +6 -0
  15. package/dist/holidays/countries/cn.js +57 -0
  16. package/dist/holidays/countries/cn.js.map +1 -0
  17. package/dist/holidays/countries/de.d.ts +6 -0
  18. package/dist/holidays/countries/de.js +81 -0
  19. package/dist/holidays/countries/de.js.map +1 -0
  20. package/dist/holidays/countries/fr.d.ts +6 -0
  21. package/dist/holidays/countries/fr.js +97 -0
  22. package/dist/holidays/countries/fr.js.map +1 -0
  23. package/dist/holidays/countries/gb.d.ts +6 -0
  24. package/dist/holidays/countries/gb.js +80 -0
  25. package/dist/holidays/countries/gb.js.map +1 -0
  26. package/dist/holidays/countries/hk.d.ts +6 -0
  27. package/dist/holidays/countries/hk.js +87 -0
  28. package/dist/holidays/countries/hk.js.map +1 -0
  29. package/dist/holidays/countries/in.d.ts +6 -0
  30. package/dist/holidays/countries/in.js +52 -0
  31. package/dist/holidays/countries/in.js.map +1 -0
  32. package/dist/holidays/countries/index.d.ts +18 -0
  33. package/dist/holidays/countries/index.js +34 -0
  34. package/dist/holidays/countries/index.js.map +1 -0
  35. package/dist/holidays/countries/ir.d.ts +7 -0
  36. package/dist/holidays/countries/ir.js +93 -0
  37. package/dist/holidays/countries/ir.js.map +1 -0
  38. package/dist/holidays/countries/jp.d.ts +6 -0
  39. package/dist/holidays/countries/jp.js +140 -0
  40. package/dist/holidays/countries/jp.js.map +1 -0
  41. package/dist/holidays/countries/sa.d.ts +7 -0
  42. package/dist/holidays/countries/sa.js +56 -0
  43. package/dist/holidays/countries/sa.js.map +1 -0
  44. package/dist/holidays/countries/sg.d.ts +6 -0
  45. package/dist/holidays/countries/sg.js +71 -0
  46. package/dist/holidays/countries/sg.js.map +1 -0
  47. package/dist/holidays/countries/th.d.ts +6 -0
  48. package/dist/holidays/countries/th.js +151 -0
  49. package/dist/holidays/countries/th.js.map +1 -0
  50. package/dist/holidays/countries/tw.d.ts +6 -0
  51. package/dist/holidays/countries/tw.js +57 -0
  52. package/dist/holidays/countries/tw.js.map +1 -0
  53. package/dist/holidays/countries/us.d.ts +6 -0
  54. package/dist/holidays/countries/us.js +112 -0
  55. package/dist/holidays/countries/us.js.map +1 -0
  56. package/dist/holidays/easter.d.ts +23 -0
  57. package/dist/holidays/easter.js +49 -0
  58. package/dist/holidays/easter.js.map +1 -0
  59. package/dist/holidays/index.d.ts +5 -0
  60. package/dist/holidays/index.js +6 -0
  61. package/dist/holidays/index.js.map +1 -0
  62. package/dist/holidays/registry.d.ts +14 -0
  63. package/dist/holidays/registry.js +79 -0
  64. package/dist/holidays/registry.js.map +1 -0
  65. package/dist/holidays/rules/easter-rule.d.ts +5 -0
  66. package/dist/holidays/rules/easter-rule.js +26 -0
  67. package/dist/holidays/rules/easter-rule.js.map +1 -0
  68. package/dist/holidays/rules/fixed-rule.d.ts +5 -0
  69. package/dist/holidays/rules/fixed-rule.js +72 -0
  70. package/dist/holidays/rules/fixed-rule.js.map +1 -0
  71. package/dist/holidays/rules/floating-rule.d.ts +6 -0
  72. package/dist/holidays/rules/floating-rule.js +53 -0
  73. package/dist/holidays/rules/floating-rule.js.map +1 -0
  74. package/dist/holidays/rules/hijri-rule.d.ts +6 -0
  75. package/dist/holidays/rules/hijri-rule.js +44 -0
  76. package/dist/holidays/rules/hijri-rule.js.map +1 -0
  77. package/dist/holidays/rules/index.d.ts +9 -0
  78. package/dist/holidays/rules/index.js +26 -0
  79. package/dist/holidays/rules/index.js.map +1 -0
  80. package/dist/holidays/types.d.ts +106 -0
  81. package/dist/holidays/types.js +2 -0
  82. package/dist/holidays/types.js.map +1 -0
  83. package/dist/index.d.ts +8 -3
  84. package/dist/index.js +5 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/operations/business-days.d.ts +30 -14
  87. package/dist/operations/business-days.js +115 -37
  88. package/dist/operations/business-days.js.map +1 -1
  89. package/dist/operations/holidays.d.ts +15 -0
  90. package/dist/operations/holidays.js +36 -0
  91. package/dist/operations/holidays.js.map +1 -0
  92. package/dist/operations/timezone.d.ts +28 -0
  93. package/dist/operations/timezone.js +120 -0
  94. package/dist/operations/timezone.js.map +1 -0
  95. package/dist/public-types.d.ts +16 -0
  96. package/dist/public-types.js.map +1 -1
  97. package/package.json +10 -1
@@ -1,2 +1,3 @@
1
1
  import type { LocalDate } from "../public-types.js";
2
2
  export declare function localDate(year: number, month: number, day: number): LocalDate;
3
+ export declare const createLocalDate: typeof localDate;
@@ -19,4 +19,5 @@ export function localDate(year, month, day) {
19
19
  day,
20
20
  };
21
21
  }
22
+ export const createLocalDate = localDate;
22
23
  //# sourceMappingURL=local-date.js.map
@@ -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 = resolved.timeZone ?? "UTC";
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
- out += offsetString === "+00:00" ? "Z" : offsetString;
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"]}
@@ -24,7 +24,16 @@ const VALID_PATTERN_TOKENS = new Set([
24
24
  "ss",
25
25
  "S",
26
26
  "SSS",
27
+ "X",
28
+ "XX",
27
29
  "XXX",
30
+ "x",
31
+ "xx",
32
+ "xxx",
33
+ "z",
34
+ "zz",
35
+ "zzz",
36
+ "zzzz",
28
37
  "Q",
29
38
  "QQQ",
30
39
  "QQQQ",
@@ -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,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * Official Public Holidays for the United Arab Emirates 🇦🇪
4
+ * Note: From Jan 1, 2022, UAE adopted Saturday & Sunday weekend.
5
+ */
6
+ export declare const uaeHolidays: HolidayCalendar;
@@ -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,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * National Public Holidays for Australia 🇦🇺
4
+ * Includes statutory national holidays and common nationwide bank holidays.
5
+ */
6
+ export declare const australiaHolidays: HolidayCalendar;
@@ -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,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * Statutory Solar Public Holidays for the People's Republic of China 🇨🇳
4
+ * 中华人民共和国法定节假日 (公历固定假期).
5
+ */
6
+ export declare const chinaHolidays: HolidayCalendar;
@@ -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"]}
@@ -0,0 +1,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * Official Federal Statutory Holidays for Germany 🇩🇪
4
+ * Bundesweite gesetzliche Feiertage.
5
+ */
6
+ export declare const germanyHolidays: HolidayCalendar;