@intech-software/chronera 0.1.4 → 0.1.6

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 (91) 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/holidays/countries/ae.d.ts +6 -0
  5. package/dist/holidays/countries/ae.js +70 -0
  6. package/dist/holidays/countries/ae.js.map +1 -0
  7. package/dist/holidays/countries/au.d.ts +6 -0
  8. package/dist/holidays/countries/au.js +79 -0
  9. package/dist/holidays/countries/au.js.map +1 -0
  10. package/dist/holidays/countries/cn.d.ts +6 -0
  11. package/dist/holidays/countries/cn.js +57 -0
  12. package/dist/holidays/countries/cn.js.map +1 -0
  13. package/dist/holidays/countries/de.d.ts +6 -0
  14. package/dist/holidays/countries/de.js +81 -0
  15. package/dist/holidays/countries/de.js.map +1 -0
  16. package/dist/holidays/countries/fr.d.ts +6 -0
  17. package/dist/holidays/countries/fr.js +97 -0
  18. package/dist/holidays/countries/fr.js.map +1 -0
  19. package/dist/holidays/countries/gb.d.ts +6 -0
  20. package/dist/holidays/countries/gb.js +80 -0
  21. package/dist/holidays/countries/gb.js.map +1 -0
  22. package/dist/holidays/countries/hk.d.ts +6 -0
  23. package/dist/holidays/countries/hk.js +87 -0
  24. package/dist/holidays/countries/hk.js.map +1 -0
  25. package/dist/holidays/countries/in.d.ts +6 -0
  26. package/dist/holidays/countries/in.js +52 -0
  27. package/dist/holidays/countries/in.js.map +1 -0
  28. package/dist/holidays/countries/index.d.ts +18 -0
  29. package/dist/holidays/countries/index.js +34 -0
  30. package/dist/holidays/countries/index.js.map +1 -0
  31. package/dist/holidays/countries/ir.d.ts +7 -0
  32. package/dist/holidays/countries/ir.js +93 -0
  33. package/dist/holidays/countries/ir.js.map +1 -0
  34. package/dist/holidays/countries/jp.d.ts +6 -0
  35. package/dist/holidays/countries/jp.js +140 -0
  36. package/dist/holidays/countries/jp.js.map +1 -0
  37. package/dist/holidays/countries/sa.d.ts +7 -0
  38. package/dist/holidays/countries/sa.js +56 -0
  39. package/dist/holidays/countries/sa.js.map +1 -0
  40. package/dist/holidays/countries/sg.d.ts +6 -0
  41. package/dist/holidays/countries/sg.js +71 -0
  42. package/dist/holidays/countries/sg.js.map +1 -0
  43. package/dist/holidays/countries/th.d.ts +6 -0
  44. package/dist/holidays/countries/th.js +151 -0
  45. package/dist/holidays/countries/th.js.map +1 -0
  46. package/dist/holidays/countries/tw.d.ts +6 -0
  47. package/dist/holidays/countries/tw.js +57 -0
  48. package/dist/holidays/countries/tw.js.map +1 -0
  49. package/dist/holidays/countries/us.d.ts +6 -0
  50. package/dist/holidays/countries/us.js +112 -0
  51. package/dist/holidays/countries/us.js.map +1 -0
  52. package/dist/holidays/easter.d.ts +23 -0
  53. package/dist/holidays/easter.js +49 -0
  54. package/dist/holidays/easter.js.map +1 -0
  55. package/dist/holidays/index.d.ts +5 -0
  56. package/dist/holidays/index.js +6 -0
  57. package/dist/holidays/index.js.map +1 -0
  58. package/dist/holidays/registry.d.ts +14 -0
  59. package/dist/holidays/registry.js +79 -0
  60. package/dist/holidays/registry.js.map +1 -0
  61. package/dist/holidays/rules/easter-rule.d.ts +5 -0
  62. package/dist/holidays/rules/easter-rule.js +26 -0
  63. package/dist/holidays/rules/easter-rule.js.map +1 -0
  64. package/dist/holidays/rules/fixed-rule.d.ts +5 -0
  65. package/dist/holidays/rules/fixed-rule.js +72 -0
  66. package/dist/holidays/rules/fixed-rule.js.map +1 -0
  67. package/dist/holidays/rules/floating-rule.d.ts +6 -0
  68. package/dist/holidays/rules/floating-rule.js +53 -0
  69. package/dist/holidays/rules/floating-rule.js.map +1 -0
  70. package/dist/holidays/rules/hijri-rule.d.ts +6 -0
  71. package/dist/holidays/rules/hijri-rule.js +44 -0
  72. package/dist/holidays/rules/hijri-rule.js.map +1 -0
  73. package/dist/holidays/rules/index.d.ts +9 -0
  74. package/dist/holidays/rules/index.js +26 -0
  75. package/dist/holidays/rules/index.js.map +1 -0
  76. package/dist/holidays/types.d.ts +106 -0
  77. package/dist/holidays/types.js +2 -0
  78. package/dist/holidays/types.js.map +1 -0
  79. package/dist/index.d.ts +8 -2
  80. package/dist/index.js +5 -2
  81. package/dist/index.js.map +1 -1
  82. package/dist/operations/business-days.d.ts +30 -14
  83. package/dist/operations/business-days.js +115 -37
  84. package/dist/operations/business-days.js.map +1 -1
  85. package/dist/operations/business-hours.d.ts +137 -0
  86. package/dist/operations/business-hours.js +488 -0
  87. package/dist/operations/business-hours.js.map +1 -0
  88. package/dist/operations/holidays.d.ts +15 -0
  89. package/dist/operations/holidays.js +36 -0
  90. package/dist/operations/holidays.js.map +1 -0
  91. package/package.json +10 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sg.js","sourceRoot":"","sources":["../../../src/holidays/countries/sg.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,QAAQ;YACd,EAAE,EAAE,gBAAgB;YACpB,UAAU,EAAE,CAAC,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,aAAa;SACtB;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,cAAc;YACtB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,oBAAoB;YACxB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,iBAAiB;SAC1B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,gBAAgB;SACzB;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;KACF;CACF,CAAC","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * Official Public Holidays for Singapore 🇸🇬\n * Multi-cultural statutory holidays with weekend-to-monday substitution.\n */\nexport const singaporeHolidays: HolidayCalendar = {\n country: \"SG\",\n countryName: \"Singapore\",\n defaultWeekendDays: [6, 7],\n rules: [\n {\n type: \"fixed\",\n id: \"sg-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: \"easter\",\n id: \"sg-good-friday\",\n offsetDays: -2,\n name: \"Good Friday\",\n nameEn: \"Good Friday\",\n },\n {\n type: \"fixed\",\n id: \"sg-labour-day\",\n month: 5,\n day: 1,\n name: \"Labour Day\",\n nameEn: \"Labour Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"sg-national-day\",\n month: 8,\n day: 9,\n name: \"National Day\",\n nameEn: \"National Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"hijri\",\n id: \"sg-hari-raya-puasa\",\n hijriMonth: 10,\n hijriDay: 1,\n name: \"Hari Raya Puasa\",\n nameEn: \"Hari Raya Puasa\",\n },\n {\n type: \"hijri\",\n id: \"sg-hari-raya-haji\",\n hijriMonth: 12,\n hijriDay: 10,\n name: \"Hari Raya Haji\",\n nameEn: \"Hari Raya Haji\",\n },\n {\n type: \"fixed\",\n id: \"sg-christmas\",\n month: 12,\n day: 25,\n name: \"Christmas Day\",\n nameEn: \"Christmas Day\",\n observed: \"weekend-to-monday\",\n },\n ],\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * Official Public Holidays for Thailand 🇹🇭
4
+ * Enforces Cabinet Substituted Holiday Rules (วันหยุดชดเชย).
5
+ */
6
+ export declare const thailandHolidays: HolidayCalendar;
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Official Public Holidays for Thailand 🇹🇭
3
+ * Enforces Cabinet Substituted Holiday Rules (วันหยุดชดเชย).
4
+ */
5
+ export const thailandHolidays = {
6
+ country: "TH",
7
+ countryName: "Thailand",
8
+ defaultWeekendDays: [6, 7], // Saturday, Sunday
9
+ rules: [
10
+ {
11
+ type: "fixed",
12
+ id: "th-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: "th-chakri",
22
+ month: 4,
23
+ day: 6,
24
+ name: "วันจักรี",
25
+ nameEn: "Chakri Memorial Day",
26
+ observed: "weekend-to-monday",
27
+ },
28
+ {
29
+ type: "fixed",
30
+ id: "th-songkran-1",
31
+ month: 4,
32
+ day: 13,
33
+ name: "วันสงกรานต์",
34
+ nameEn: "Songkran Festival Day 1",
35
+ observed: "weekend-to-monday",
36
+ },
37
+ {
38
+ type: "fixed",
39
+ id: "th-songkran-2",
40
+ month: 4,
41
+ day: 14,
42
+ name: "วันสงกรานต์",
43
+ nameEn: "Songkran Festival Day 2",
44
+ observed: "weekend-to-monday",
45
+ },
46
+ {
47
+ type: "fixed",
48
+ id: "th-songkran-3",
49
+ month: 4,
50
+ day: 15,
51
+ name: "วันสงกรานต์",
52
+ nameEn: "Songkran Festival Day 3",
53
+ observed: "weekend-to-monday",
54
+ },
55
+ {
56
+ type: "fixed",
57
+ id: "th-labour",
58
+ month: 5,
59
+ day: 1,
60
+ name: "วันแรงงานแห่งชาติ",
61
+ nameEn: "National Labour Day",
62
+ observed: "weekend-to-monday",
63
+ },
64
+ {
65
+ type: "fixed",
66
+ id: "th-coronation",
67
+ month: 5,
68
+ day: 4,
69
+ name: "วันฉัตรมงคล",
70
+ nameEn: "Coronation Day",
71
+ observed: "weekend-to-monday",
72
+ validFromYear: 2019,
73
+ },
74
+ {
75
+ type: "fixed",
76
+ id: "th-queen-birthday",
77
+ month: 6,
78
+ day: 3,
79
+ name: "วันเฉลิมพระชนมพรรษาสมเด็จพระนางเจ้าสุทิดาฯ",
80
+ nameEn: "HM Queen Suthida's Birthday",
81
+ observed: "weekend-to-monday",
82
+ validFromYear: 2019,
83
+ },
84
+ {
85
+ type: "fixed",
86
+ id: "th-king-birthday",
87
+ month: 7,
88
+ day: 28,
89
+ name: "วันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระเจ้าอยู่หัว",
90
+ nameEn: "HM King Maha Vajiralongkorn's Birthday",
91
+ observed: "weekend-to-monday",
92
+ validFromYear: 2017,
93
+ },
94
+ {
95
+ type: "fixed",
96
+ id: "th-queen-mother-birthday",
97
+ month: 8,
98
+ day: 12,
99
+ name: "วันเฉลิมพระชนมพรรษาสมเด็จพระบรมราชชนนีพันปีหลวง / วันแม่แห่งชาติ",
100
+ nameEn: "HM Queen Sirikit The Queen Mother's Birthday / National Mother's Day",
101
+ observed: "weekend-to-monday",
102
+ },
103
+ {
104
+ type: "fixed",
105
+ id: "th-king-memorial",
106
+ month: 10,
107
+ day: 13,
108
+ name: "วันนวมินทรมหาราช",
109
+ nameEn: "King Bhumibol Adulyadej Memorial Day",
110
+ observed: "weekend-to-monday",
111
+ validFromYear: 2017,
112
+ },
113
+ {
114
+ type: "fixed",
115
+ id: "th-chulalongkorn",
116
+ month: 10,
117
+ day: 23,
118
+ name: "วันปิยมหาราช",
119
+ nameEn: "Chulalongkorn Day",
120
+ observed: "weekend-to-monday",
121
+ },
122
+ {
123
+ type: "fixed",
124
+ id: "th-king-father-birthday",
125
+ month: 12,
126
+ day: 5,
127
+ name: "วันคล้ายวันพระบรมราชสมภพ ร.9 / วันพ่อแห่งชาติ",
128
+ nameEn: "King Bhumibol Adulyadej's Birthday / National Father's Day",
129
+ observed: "weekend-to-monday",
130
+ },
131
+ {
132
+ type: "fixed",
133
+ id: "th-constitution",
134
+ month: 12,
135
+ day: 10,
136
+ name: "วันรัฐธรรมนูญ",
137
+ nameEn: "Constitution Day",
138
+ observed: "weekend-to-monday",
139
+ },
140
+ {
141
+ type: "fixed",
142
+ id: "th-new-year-eve",
143
+ month: 12,
144
+ day: 31,
145
+ name: "วันสิ้นปี",
146
+ nameEn: "New Year's Eve",
147
+ observed: "none",
148
+ },
149
+ ],
150
+ };
151
+ //# sourceMappingURL=th.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"th.js","sourceRoot":"","sources":["../../../src/holidays/countries/th.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * Official Public Holidays for Thailand 🇹🇭\n * Enforces Cabinet Substituted Holiday Rules (วันหยุดชดเชย).\n */\nexport const thailandHolidays: HolidayCalendar = {\n country: \"TH\",\n countryName: \"Thailand\",\n defaultWeekendDays: [6, 7], // Saturday, Sunday\n rules: [\n {\n type: \"fixed\",\n id: \"th-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: \"th-chakri\",\n month: 4,\n day: 6,\n name: \"วันจักรี\",\n nameEn: \"Chakri Memorial Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-songkran-1\",\n month: 4,\n day: 13,\n name: \"วันสงกรานต์\",\n nameEn: \"Songkran Festival Day 1\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-songkran-2\",\n month: 4,\n day: 14,\n name: \"วันสงกรานต์\",\n nameEn: \"Songkran Festival Day 2\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-songkran-3\",\n month: 4,\n day: 15,\n name: \"วันสงกรานต์\",\n nameEn: \"Songkran Festival Day 3\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-labour\",\n month: 5,\n day: 1,\n name: \"วันแรงงานแห่งชาติ\",\n nameEn: \"National Labour Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-coronation\",\n month: 5,\n day: 4,\n name: \"วันฉัตรมงคล\",\n nameEn: \"Coronation Day\",\n observed: \"weekend-to-monday\",\n validFromYear: 2019,\n },\n {\n type: \"fixed\",\n id: \"th-queen-birthday\",\n month: 6,\n day: 3,\n name: \"วันเฉลิมพระชนมพรรษาสมเด็จพระนางเจ้าสุทิดาฯ\",\n nameEn: \"HM Queen Suthida's Birthday\",\n observed: \"weekend-to-monday\",\n validFromYear: 2019,\n },\n {\n type: \"fixed\",\n id: \"th-king-birthday\",\n month: 7,\n day: 28,\n name: \"วันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระเจ้าอยู่หัว\",\n nameEn: \"HM King Maha Vajiralongkorn's Birthday\",\n observed: \"weekend-to-monday\",\n validFromYear: 2017,\n },\n {\n type: \"fixed\",\n id: \"th-queen-mother-birthday\",\n month: 8,\n day: 12,\n name: \"วันเฉลิมพระชนมพรรษาสมเด็จพระบรมราชชนนีพันปีหลวง / วันแม่แห่งชาติ\",\n nameEn:\n \"HM Queen Sirikit The Queen Mother's Birthday / National Mother's Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-king-memorial\",\n month: 10,\n day: 13,\n name: \"วันนวมินทรมหาราช\",\n nameEn: \"King Bhumibol Adulyadej Memorial Day\",\n observed: \"weekend-to-monday\",\n validFromYear: 2017,\n },\n {\n type: \"fixed\",\n id: \"th-chulalongkorn\",\n month: 10,\n day: 23,\n name: \"วันปิยมหาราช\",\n nameEn: \"Chulalongkorn Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-king-father-birthday\",\n month: 12,\n day: 5,\n name: \"วันคล้ายวันพระบรมราชสมภพ ร.9 / วันพ่อแห่งชาติ\",\n nameEn: \"King Bhumibol Adulyadej's Birthday / National Father's Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-constitution\",\n month: 12,\n day: 10,\n name: \"วันรัฐธรรมนูญ\",\n nameEn: \"Constitution Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"th-new-year-eve\",\n month: 12,\n day: 31,\n name: \"วันสิ้นปี\",\n nameEn: \"New Year's Eve\",\n observed: \"none\",\n },\n ],\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * Official Public Holidays for Taiwan 🇹🇼
4
+ * Evaluated with Republic of China (Minguo) and statutory observances.
5
+ */
6
+ export declare const taiwanHolidays: HolidayCalendar;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Official Public Holidays for Taiwan 🇹🇼
3
+ * Evaluated with Republic of China (Minguo) and statutory observances.
4
+ */
5
+ export const taiwanHolidays = {
6
+ country: "TW",
7
+ countryName: "Taiwan",
8
+ defaultWeekendDays: [6, 7],
9
+ rules: [
10
+ {
11
+ type: "fixed",
12
+ id: "tw-founding-day",
13
+ month: 1,
14
+ day: 1,
15
+ name: "中華民國開國紀念日",
16
+ nameEn: "Founding Day of the Republic of China",
17
+ observed: "weekend-to-monday",
18
+ },
19
+ {
20
+ type: "fixed",
21
+ id: "tw-peace-memorial",
22
+ month: 2,
23
+ day: 28,
24
+ name: "和平紀念日",
25
+ nameEn: "Peace Memorial Day",
26
+ observed: "weekend-to-monday",
27
+ },
28
+ {
29
+ type: "fixed",
30
+ id: "tw-childrens-day",
31
+ month: 4,
32
+ day: 4,
33
+ name: "兒童節",
34
+ nameEn: "Children's Day",
35
+ observed: "weekend-to-monday",
36
+ },
37
+ {
38
+ type: "fixed",
39
+ id: "tw-labour-day",
40
+ month: 5,
41
+ day: 1,
42
+ name: "勞動節",
43
+ nameEn: "Labor Day",
44
+ observed: "weekend-to-monday",
45
+ },
46
+ {
47
+ type: "fixed",
48
+ id: "tw-national-day",
49
+ month: 10,
50
+ day: 10,
51
+ name: "國慶日",
52
+ nameEn: "National Day (Double Tenth Day)",
53
+ observed: "weekend-to-monday",
54
+ },
55
+ ],
56
+ };
57
+ //# sourceMappingURL=tw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tw.js","sourceRoot":"","sources":["../../../src/holidays/countries/tw.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,QAAQ;IACrB,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,KAAK,EAAE;QACL;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,uCAAuC;YAC/C,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,oBAAoB;YAC5B,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,kBAAkB;YACtB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,gBAAgB;YACxB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,mBAAmB;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,iCAAiC;YACzC,QAAQ,EAAE,mBAAmB;SAC9B;KACF;CACF,CAAC","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * Official Public Holidays for Taiwan 🇹🇼\n * Evaluated with Republic of China (Minguo) and statutory observances.\n */\nexport const taiwanHolidays: HolidayCalendar = {\n country: \"TW\",\n countryName: \"Taiwan\",\n defaultWeekendDays: [6, 7],\n rules: [\n {\n type: \"fixed\",\n id: \"tw-founding-day\",\n month: 1,\n day: 1,\n name: \"中華民國開國紀念日\",\n nameEn: \"Founding Day of the Republic of China\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"tw-peace-memorial\",\n month: 2,\n day: 28,\n name: \"和平紀念日\",\n nameEn: \"Peace Memorial Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"tw-childrens-day\",\n month: 4,\n day: 4,\n name: \"兒童節\",\n nameEn: \"Children's Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"tw-labour-day\",\n month: 5,\n day: 1,\n name: \"勞動節\",\n nameEn: \"Labor Day\",\n observed: \"weekend-to-monday\",\n },\n {\n type: \"fixed\",\n id: \"tw-national-day\",\n month: 10,\n day: 10,\n name: \"國慶日\",\n nameEn: \"National Day (Double Tenth Day)\",\n observed: \"weekend-to-monday\",\n },\n ],\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { HolidayCalendar } from "../types.js";
2
+ /**
3
+ * Official Federal Public Holidays for the United States 🇺🇸
4
+ * Includes all 11 Federal statutory holidays with Saturday-to-Friday and Sunday-to-Monday substitution.
5
+ */
6
+ export declare const unitedStatesHolidays: HolidayCalendar;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Official Federal Public Holidays for the United States 🇺🇸
3
+ * Includes all 11 Federal statutory holidays with Saturday-to-Friday and Sunday-to-Monday substitution.
4
+ */
5
+ export const unitedStatesHolidays = {
6
+ country: "US",
7
+ countryName: "United States",
8
+ defaultWeekendDays: [6, 7],
9
+ rules: [
10
+ {
11
+ type: "fixed",
12
+ id: "us-new-year",
13
+ month: 1,
14
+ day: 1,
15
+ name: "New Year's Day",
16
+ nameEn: "New Year's Day",
17
+ observed: "sat-to-fri-sun-to-mon",
18
+ },
19
+ {
20
+ type: "floating",
21
+ id: "us-mlk-day",
22
+ month: 1,
23
+ weekday: 1, // Monday
24
+ occurrence: 3, // 3rd Monday
25
+ name: "Martin Luther King Jr. Day",
26
+ nameEn: "Martin Luther King Jr. Day",
27
+ },
28
+ {
29
+ type: "floating",
30
+ id: "us-presidents-day",
31
+ month: 2,
32
+ weekday: 1, // Monday
33
+ occurrence: 3, // 3rd Monday
34
+ name: "Washington's Birthday (Presidents' Day)",
35
+ nameEn: "Washington's Birthday (Presidents' Day)",
36
+ },
37
+ {
38
+ type: "floating",
39
+ id: "us-memorial-day",
40
+ month: 5,
41
+ weekday: 1, // Monday
42
+ occurrence: -1, // Last Monday of May
43
+ name: "Memorial Day",
44
+ nameEn: "Memorial Day",
45
+ },
46
+ {
47
+ type: "fixed",
48
+ id: "us-juneteenth",
49
+ month: 6,
50
+ day: 19,
51
+ name: "Juneteenth National Independence Day",
52
+ nameEn: "Juneteenth National Independence Day",
53
+ observed: "sat-to-fri-sun-to-mon",
54
+ validFromYear: 2021,
55
+ },
56
+ {
57
+ type: "fixed",
58
+ id: "us-independence-day",
59
+ month: 7,
60
+ day: 4,
61
+ name: "Independence Day",
62
+ nameEn: "Independence Day",
63
+ observed: "sat-to-fri-sun-to-mon",
64
+ },
65
+ {
66
+ type: "floating",
67
+ id: "us-labor-day",
68
+ month: 9,
69
+ weekday: 1, // Monday
70
+ occurrence: 1, // 1st Monday
71
+ name: "Labor Day",
72
+ nameEn: "Labor Day",
73
+ },
74
+ {
75
+ type: "floating",
76
+ id: "us-columbus-day",
77
+ month: 10,
78
+ weekday: 1, // Monday
79
+ occurrence: 2, // 2nd Monday
80
+ name: "Columbus Day / Indigenous Peoples' Day",
81
+ nameEn: "Columbus Day / Indigenous Peoples' Day",
82
+ },
83
+ {
84
+ type: "fixed",
85
+ id: "us-veterans-day",
86
+ month: 11,
87
+ day: 11,
88
+ name: "Veterans Day",
89
+ nameEn: "Veterans Day",
90
+ observed: "sat-to-fri-sun-to-mon",
91
+ },
92
+ {
93
+ type: "floating",
94
+ id: "us-thanksgiving",
95
+ month: 11,
96
+ weekday: 4, // Thursday
97
+ occurrence: 4, // 4th Thursday
98
+ name: "Thanksgiving Day",
99
+ nameEn: "Thanksgiving Day",
100
+ },
101
+ {
102
+ type: "fixed",
103
+ id: "us-christmas",
104
+ month: 12,
105
+ day: 25,
106
+ name: "Christmas Day",
107
+ nameEn: "Christmas Day",
108
+ observed: "sat-to-fri-sun-to-mon",
109
+ },
110
+ ],
111
+ };
112
+ //# sourceMappingURL=us.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us.js","sourceRoot":"","sources":["../../../src/holidays/countries/us.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HolidayCalendar } from \"../types.js\";\n\n/**\n * Official Federal Public Holidays for the United States 🇺🇸\n * Includes all 11 Federal statutory holidays with Saturday-to-Friday and Sunday-to-Monday substitution.\n */\nexport const unitedStatesHolidays: HolidayCalendar = {\n country: \"US\",\n countryName: \"United States\",\n defaultWeekendDays: [6, 7],\n rules: [\n {\n type: \"fixed\",\n id: \"us-new-year\",\n month: 1,\n day: 1,\n name: \"New Year's Day\",\n nameEn: \"New Year's Day\",\n observed: \"sat-to-fri-sun-to-mon\",\n },\n {\n type: \"floating\",\n id: \"us-mlk-day\",\n month: 1,\n weekday: 1, // Monday\n occurrence: 3, // 3rd Monday\n name: \"Martin Luther King Jr. Day\",\n nameEn: \"Martin Luther King Jr. Day\",\n },\n {\n type: \"floating\",\n id: \"us-presidents-day\",\n month: 2,\n weekday: 1, // Monday\n occurrence: 3, // 3rd Monday\n name: \"Washington's Birthday (Presidents' Day)\",\n nameEn: \"Washington's Birthday (Presidents' Day)\",\n },\n {\n type: \"floating\",\n id: \"us-memorial-day\",\n month: 5,\n weekday: 1, // Monday\n occurrence: -1, // Last Monday of May\n name: \"Memorial Day\",\n nameEn: \"Memorial Day\",\n },\n {\n type: \"fixed\",\n id: \"us-juneteenth\",\n month: 6,\n day: 19,\n name: \"Juneteenth National Independence Day\",\n nameEn: \"Juneteenth National Independence Day\",\n observed: \"sat-to-fri-sun-to-mon\",\n validFromYear: 2021,\n },\n {\n type: \"fixed\",\n id: \"us-independence-day\",\n month: 7,\n day: 4,\n name: \"Independence Day\",\n nameEn: \"Independence Day\",\n observed: \"sat-to-fri-sun-to-mon\",\n },\n {\n type: \"floating\",\n id: \"us-labor-day\",\n month: 9,\n weekday: 1, // Monday\n occurrence: 1, // 1st Monday\n name: \"Labor Day\",\n nameEn: \"Labor Day\",\n },\n {\n type: \"floating\",\n id: \"us-columbus-day\",\n month: 10,\n weekday: 1, // Monday\n occurrence: 2, // 2nd Monday\n name: \"Columbus Day / Indigenous Peoples' Day\",\n nameEn: \"Columbus Day / Indigenous Peoples' Day\",\n },\n {\n type: \"fixed\",\n id: \"us-veterans-day\",\n month: 11,\n day: 11,\n name: \"Veterans Day\",\n nameEn: \"Veterans Day\",\n observed: \"sat-to-fri-sun-to-mon\",\n },\n {\n type: \"floating\",\n id: \"us-thanksgiving\",\n month: 11,\n weekday: 4, // Thursday\n occurrence: 4, // 4th Thursday\n name: \"Thanksgiving Day\",\n nameEn: \"Thanksgiving Day\",\n },\n {\n type: \"fixed\",\n id: \"us-christmas\",\n month: 12,\n day: 25,\n name: \"Christmas Day\",\n nameEn: \"Christmas Day\",\n observed: \"sat-to-fri-sun-to-mon\",\n },\n ],\n};\n"]}
@@ -0,0 +1,23 @@
1
+ import type { LocalDate } from "../public-types.js";
2
+ /**
3
+ * Calculates Easter Sunday for any Gregorian year using the anonymous Meeus/Jones/Butcher algorithm.
4
+ * 100% deterministic integer arithmetic with zero external dependencies.
5
+ * Reference: Jean Meeus, Astronomical Algorithms (1991), p. 67.
6
+ */
7
+ export declare function calculateEasterSunday(year: number): LocalDate;
8
+ /**
9
+ * Returns Good Friday for the specified year (Easter Sunday - 2 days).
10
+ */
11
+ export declare function calculateGoodFriday(year: number): LocalDate;
12
+ /**
13
+ * Returns Easter Monday for the specified year (Easter Sunday + 1 day).
14
+ */
15
+ export declare function calculateEasterMonday(year: number): LocalDate;
16
+ /**
17
+ * Returns Ascension Day for the specified year (Easter Sunday + 39 days).
18
+ */
19
+ export declare function calculateAscensionDay(year: number): LocalDate;
20
+ /**
21
+ * Returns Whit Monday / Pentecost Monday for the specified year (Easter Sunday + 50 days).
22
+ */
23
+ export declare function calculateWhitMonday(year: number): LocalDate;
@@ -0,0 +1,49 @@
1
+ import { createLocalDate } from "../core/local-date.js";
2
+ import { addDays } from "../operations/convenience.js";
3
+ /**
4
+ * Calculates Easter Sunday for any Gregorian year using the anonymous Meeus/Jones/Butcher algorithm.
5
+ * 100% deterministic integer arithmetic with zero external dependencies.
6
+ * Reference: Jean Meeus, Astronomical Algorithms (1991), p. 67.
7
+ */
8
+ export function calculateEasterSunday(year) {
9
+ const a = year % 19;
10
+ const b = Math.floor(year / 100);
11
+ const c = year % 100;
12
+ const d = Math.floor(b / 4);
13
+ const e = b % 4;
14
+ const f = Math.floor((b + 8) / 25);
15
+ const g = Math.floor((b - f + 1) / 3);
16
+ const h = (19 * a + b - d - g + 15) % 30;
17
+ const i = Math.floor(c / 4);
18
+ const k = c % 4;
19
+ const l = (32 + 2 * e + 2 * i - h - k) % 7;
20
+ const m = Math.floor((a + 11 * h + 22 * l) / 451);
21
+ const month = Math.floor((h + l - 7 * m + 114) / 31);
22
+ const day = ((h + l - 7 * m + 114) % 31) + 1;
23
+ return createLocalDate(year, month, day);
24
+ }
25
+ /**
26
+ * Returns Good Friday for the specified year (Easter Sunday - 2 days).
27
+ */
28
+ export function calculateGoodFriday(year) {
29
+ return addDays(calculateEasterSunday(year), -2);
30
+ }
31
+ /**
32
+ * Returns Easter Monday for the specified year (Easter Sunday + 1 day).
33
+ */
34
+ export function calculateEasterMonday(year) {
35
+ return addDays(calculateEasterSunday(year), 1);
36
+ }
37
+ /**
38
+ * Returns Ascension Day for the specified year (Easter Sunday + 39 days).
39
+ */
40
+ export function calculateAscensionDay(year) {
41
+ return addDays(calculateEasterSunday(year), 39);
42
+ }
43
+ /**
44
+ * Returns Whit Monday / Pentecost Monday for the specified year (Easter Sunday + 50 days).
45
+ */
46
+ export function calculateWhitMonday(year) {
47
+ return addDays(calculateEasterSunday(year), 50);
48
+ }
49
+ //# sourceMappingURL=easter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easter.js","sourceRoot":"","sources":["../../src/holidays/easter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAIvD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAE7C,OAAO,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { createLocalDate } from \"../core/local-date.js\";\nimport { addDays } from \"../operations/convenience.js\";\n\nimport type { LocalDate } from \"../public-types.js\";\n\n/**\n * Calculates Easter Sunday for any Gregorian year using the anonymous Meeus/Jones/Butcher algorithm.\n * 100% deterministic integer arithmetic with zero external dependencies.\n * Reference: Jean Meeus, Astronomical Algorithms (1991), p. 67.\n */\nexport function calculateEasterSunday(year: number): LocalDate {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return createLocalDate(year, month, day);\n}\n\n/**\n * Returns Good Friday for the specified year (Easter Sunday - 2 days).\n */\nexport function calculateGoodFriday(year: number): LocalDate {\n return addDays(calculateEasterSunday(year), -2);\n}\n\n/**\n * Returns Easter Monday for the specified year (Easter Sunday + 1 day).\n */\nexport function calculateEasterMonday(year: number): LocalDate {\n return addDays(calculateEasterSunday(year), 1);\n}\n\n/**\n * Returns Ascension Day for the specified year (Easter Sunday + 39 days).\n */\nexport function calculateAscensionDay(year: number): LocalDate {\n return addDays(calculateEasterSunday(year), 39);\n}\n\n/**\n * Returns Whit Monday / Pentecost Monday for the specified year (Easter Sunday + 50 days).\n */\nexport function calculateWhitMonday(year: number): LocalDate {\n return addDays(calculateEasterSunday(year), 50);\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export * from "./types.js";
2
+ export * from "./easter.js";
3
+ export * from "./rules/index.js";
4
+ export * from "./countries/index.js";
5
+ export * from "./registry.js";
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export * from "./easter.js";
3
+ export * from "./rules/index.js";
4
+ export * from "./countries/index.js";
5
+ export * from "./registry.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/holidays/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC","sourcesContent":["export * from \"./types.js\";\nexport * from \"./easter.js\";\nexport * from \"./rules/index.js\";\nexport * from \"./countries/index.js\";\nexport * from \"./registry.js\";\n"]}
@@ -0,0 +1,14 @@
1
+ import type { CountryCode, HolidayCalendar, PublicHoliday, HolidayOptions } from "./types.js";
2
+ /**
3
+ * Registers a custom or corporate holiday calendar.
4
+ */
5
+ export declare function registerHolidayCalendar(calendar: HolidayCalendar): void;
6
+ /**
7
+ * Retrieves a holiday calendar by country code.
8
+ */
9
+ export declare function getHolidayCalendar(countryCodeOrCalendar: CountryCode | string | HolidayCalendar): HolidayCalendar;
10
+ /**
11
+ * Resolves all public holidays for a given country and Gregorian year.
12
+ * Uses bounded LRU caching for microsecond deterministic lookups.
13
+ */
14
+ export declare function resolveAnnualHolidays(country: CountryCode | string | HolidayCalendar, year: number, options?: HolidayOptions): readonly PublicHoliday[];
@@ -0,0 +1,79 @@
1
+ import { BoundedLRU } from "../runtime/bounded-lru.js";
2
+ import { BUILT_IN_HOLIDAYS } from "./countries/index.js";
3
+ import { evaluateRule } from "./rules/index.js";
4
+ import { ChroneraError } from "../errors/errors.js";
5
+ const holidayCache = new BoundedLRU(128);
6
+ const customCalendars = new Map();
7
+ /**
8
+ * Registers a custom or corporate holiday calendar.
9
+ */
10
+ export function registerHolidayCalendar(calendar) {
11
+ customCalendars.set(calendar.country.toUpperCase(), calendar);
12
+ }
13
+ /**
14
+ * Retrieves a holiday calendar by country code.
15
+ */
16
+ export function getHolidayCalendar(countryCodeOrCalendar) {
17
+ if (typeof countryCodeOrCalendar === "object" &&
18
+ countryCodeOrCalendar !== null) {
19
+ return countryCodeOrCalendar;
20
+ }
21
+ const code = countryCodeOrCalendar.toUpperCase();
22
+ const calendar = customCalendars.get(code) ?? BUILT_IN_HOLIDAYS[code];
23
+ if (!calendar) {
24
+ throw new ChroneraError("CHRONERA_INVALID_LOCALE", `Holiday calendar for country code "${countryCodeOrCalendar}" is not supported. Supported codes: ${Object.keys(BUILT_IN_HOLIDAYS).join(", ")}.`);
25
+ }
26
+ return calendar;
27
+ }
28
+ /**
29
+ * Resolves all public holidays for a given country and Gregorian year.
30
+ * Uses bounded LRU caching for microsecond deterministic lookups.
31
+ */
32
+ export function resolveAnnualHolidays(country, year, options) {
33
+ const calendar = getHolidayCalendar(country);
34
+ const includeObserved = options?.includeObserved ?? true;
35
+ const cacheKey = `${calendar.country}:${year}:${includeObserved}`;
36
+ let holidays = holidayCache.get(cacheKey);
37
+ if (!holidays) {
38
+ const list = [];
39
+ for (const rule of calendar.rules) {
40
+ const evaluated = evaluateRule(rule, year, calendar.country, includeObserved);
41
+ for (const h of evaluated) {
42
+ list.push(h);
43
+ }
44
+ }
45
+ // Sort chronologically by date
46
+ list.sort((a, b) => {
47
+ if (a.date.year !== b.date.year)
48
+ return a.date.year - b.date.year;
49
+ if (a.date.month !== b.date.month)
50
+ return a.date.month - b.date.month;
51
+ return a.date.day - b.date.day;
52
+ });
53
+ holidays = Object.freeze(list);
54
+ holidayCache.set(cacheKey, holidays);
55
+ }
56
+ if (options?.additionalHolidays && options.additionalHolidays.length > 0) {
57
+ const combined = [...holidays];
58
+ for (const [idx, addDate] of options.additionalHolidays.entries()) {
59
+ combined.push({
60
+ id: `custom-additional-${idx + 1}`,
61
+ date: addDate,
62
+ name: "วันหยุดพิเศษ / Additional Holiday",
63
+ nameEn: "Additional Holiday",
64
+ country: calendar.country,
65
+ isObserved: false,
66
+ });
67
+ }
68
+ combined.sort((a, b) => {
69
+ if (a.date.year !== b.date.year)
70
+ return a.date.year - b.date.year;
71
+ if (a.date.month !== b.date.month)
72
+ return a.date.month - b.date.month;
73
+ return a.date.day - b.date.day;
74
+ });
75
+ return Object.freeze(combined);
76
+ }
77
+ return holidays;
78
+ }
79
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/holidays/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundedLRU } from \"../runtime/bounded-lru.js\";\nimport { BUILT_IN_HOLIDAYS } from \"./countries/index.js\";\nimport { evaluateRule } from \"./rules/index.js\";\nimport { ChroneraError } from \"../errors/errors.js\";\n\nimport type {\n CountryCode,\n HolidayCalendar,\n PublicHoliday,\n HolidayOptions,\n} from \"./types.js\";\n\nconst holidayCache = new BoundedLRU<readonly PublicHoliday[]>(128);\nconst customCalendars = new Map<string, HolidayCalendar>();\n\n/**\n * Registers a custom or corporate holiday calendar.\n */\nexport function registerHolidayCalendar(calendar: HolidayCalendar): void {\n customCalendars.set(calendar.country.toUpperCase(), calendar);\n}\n\n/**\n * Retrieves a holiday calendar by country code.\n */\nexport function getHolidayCalendar(\n countryCodeOrCalendar: CountryCode | string | HolidayCalendar,\n): HolidayCalendar {\n if (\n typeof countryCodeOrCalendar === \"object\" &&\n countryCodeOrCalendar !== null\n ) {\n return countryCodeOrCalendar;\n }\n\n const code = countryCodeOrCalendar.toUpperCase() as CountryCode;\n const calendar = customCalendars.get(code) ?? BUILT_IN_HOLIDAYS[code];\n\n if (!calendar) {\n throw new ChroneraError(\n \"CHRONERA_INVALID_LOCALE\",\n `Holiday calendar for country code \"${countryCodeOrCalendar}\" is not supported. Supported codes: ${Object.keys(BUILT_IN_HOLIDAYS).join(\", \")}.`,\n );\n }\n\n return calendar;\n}\n\n/**\n * Resolves all public holidays for a given country and Gregorian year.\n * Uses bounded LRU caching for microsecond deterministic lookups.\n */\nexport function resolveAnnualHolidays(\n country: CountryCode | string | HolidayCalendar,\n year: number,\n options?: HolidayOptions,\n): readonly PublicHoliday[] {\n const calendar = getHolidayCalendar(country);\n const includeObserved = options?.includeObserved ?? true;\n const cacheKey = `${calendar.country}:${year}:${includeObserved}`;\n\n let holidays = holidayCache.get(cacheKey);\n\n if (!holidays) {\n const list: PublicHoliday[] = [];\n for (const rule of calendar.rules) {\n const evaluated = evaluateRule(\n rule,\n year,\n calendar.country,\n includeObserved,\n );\n for (const h of evaluated) {\n list.push(h);\n }\n }\n\n // Sort chronologically by date\n list.sort((a, b) => {\n if (a.date.year !== b.date.year) return a.date.year - b.date.year;\n if (a.date.month !== b.date.month) return a.date.month - b.date.month;\n return a.date.day - b.date.day;\n });\n\n holidays = Object.freeze(list);\n holidayCache.set(cacheKey, holidays);\n }\n\n if (options?.additionalHolidays && options.additionalHolidays.length > 0) {\n const combined = [...holidays];\n for (const [idx, addDate] of options.additionalHolidays.entries()) {\n combined.push({\n id: `custom-additional-${idx + 1}`,\n date: addDate,\n name: \"วันหยุดพิเศษ / Additional Holiday\",\n nameEn: \"Additional Holiday\",\n country: calendar.country,\n isObserved: false,\n });\n }\n combined.sort((a, b) => {\n if (a.date.year !== b.date.year) return a.date.year - b.date.year;\n if (a.date.month !== b.date.month) return a.date.month - b.date.month;\n return a.date.day - b.date.day;\n });\n return Object.freeze(combined);\n }\n\n return holidays;\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { EasterHolidayRule, PublicHoliday, CountryCode } from "../types.js";
2
+ /**
3
+ * Evaluates an Easter cycle holiday rule (Good Friday, Easter Monday, Ascension Day, etc.).
4
+ */
5
+ export declare function evaluateEasterRule(rule: EasterHolidayRule, year: number, country: CountryCode | (string & {})): readonly PublicHoliday[];
@@ -0,0 +1,26 @@
1
+ import { calculateEasterSunday } from "../easter.js";
2
+ import { addDays } from "../../operations/convenience.js";
3
+ /**
4
+ * Evaluates an Easter cycle holiday rule (Good Friday, Easter Monday, Ascension Day, etc.).
5
+ */
6
+ export function evaluateEasterRule(rule, year, country) {
7
+ if (rule.validFromYear && year < rule.validFromYear)
8
+ return [];
9
+ if (rule.validUntilYear && year > rule.validUntilYear)
10
+ return [];
11
+ const easterSunday = calculateEasterSunday(year);
12
+ const date = rule.offsetDays === 0
13
+ ? easterSunday
14
+ : addDays(easterSunday, rule.offsetDays);
15
+ return [
16
+ {
17
+ id: rule.id,
18
+ date,
19
+ name: rule.name,
20
+ nameEn: rule.nameEn,
21
+ country,
22
+ isObserved: false,
23
+ },
24
+ ];
25
+ }
26
+ //# sourceMappingURL=easter-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easter-rule.js","sourceRoot":"","sources":["../../../src/holidays/rules/easter-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAQ1D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,IAAY,EACZ,OAAoC;IAEpC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,CAAC;IAC/D,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAEjE,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GACR,IAAI,CAAC,UAAU,KAAK,CAAC;QACnB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7C,OAAO;QACL;YACE,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO;YACP,UAAU,EAAE,KAAK;SAClB;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { calculateEasterSunday } from \"../easter.js\";\nimport { addDays } from \"../../operations/convenience.js\";\n\nimport type {\n EasterHolidayRule,\n PublicHoliday,\n CountryCode,\n} from \"../types.js\";\n\n/**\n * Evaluates an Easter cycle holiday rule (Good Friday, Easter Monday, Ascension Day, etc.).\n */\nexport function evaluateEasterRule(\n rule: EasterHolidayRule,\n year: number,\n country: CountryCode | (string & {}),\n): readonly PublicHoliday[] {\n if (rule.validFromYear && year < rule.validFromYear) return [];\n if (rule.validUntilYear && year > rule.validUntilYear) return [];\n\n const easterSunday = calculateEasterSunday(year);\n const date =\n rule.offsetDays === 0\n ? easterSunday\n : addDays(easterSunday, rule.offsetDays);\n\n return [\n {\n id: rule.id,\n date,\n name: rule.name,\n nameEn: rule.nameEn,\n country,\n isObserved: false,\n },\n ];\n}\n"]}