@intech-software/chronera 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +6644 -0
  3. package/dist/calendar/buddhist/adapter.d.ts +2 -0
  4. package/dist/calendar/buddhist/adapter.js +33 -0
  5. package/dist/calendar/buddhist/adapter.js.map +1 -0
  6. package/dist/calendar/buddhist/constants.d.ts +3 -0
  7. package/dist/calendar/buddhist/constants.js +14 -0
  8. package/dist/calendar/buddhist/constants.js.map +1 -0
  9. package/dist/calendar/buddhist/index.d.ts +3 -0
  10. package/dist/calendar/buddhist/index.js +4 -0
  11. package/dist/calendar/buddhist/index.js.map +1 -0
  12. package/dist/calendar/buddhist/validator.d.ts +4 -0
  13. package/dist/calendar/buddhist/validator.js +60 -0
  14. package/dist/calendar/buddhist/validator.js.map +1 -0
  15. package/dist/calendar/gregory/absolute-day.d.ts +12 -0
  16. package/dist/calendar/gregory/absolute-day.js +14 -0
  17. package/dist/calendar/gregory/absolute-day.js.map +1 -0
  18. package/dist/calendar/gregory/adapter.d.ts +3 -0
  19. package/dist/calendar/gregory/adapter.js +93 -0
  20. package/dist/calendar/gregory/adapter.js.map +1 -0
  21. package/dist/calendar/gregory/constants.d.ts +3 -0
  22. package/dist/calendar/gregory/constants.js +18 -0
  23. package/dist/calendar/gregory/constants.js.map +1 -0
  24. package/dist/calendar/gregory/index.d.ts +4 -0
  25. package/dist/calendar/gregory/index.js +5 -0
  26. package/dist/calendar/gregory/index.js.map +1 -0
  27. package/dist/calendar/gregory/leap-year.d.ts +1 -0
  28. package/dist/calendar/gregory/leap-year.js +2 -0
  29. package/dist/calendar/gregory/leap-year.js.map +1 -0
  30. package/dist/calendar/gregory/validator.d.ts +2 -0
  31. package/dist/calendar/gregory/validator.js +45 -0
  32. package/dist/calendar/gregory/validator.js.map +1 -0
  33. package/dist/calendar/hijri/civil-adapter.d.ts +12 -0
  34. package/dist/calendar/hijri/civil-adapter.js +132 -0
  35. package/dist/calendar/hijri/civil-adapter.js.map +1 -0
  36. package/dist/calendar/hijri/index.d.ts +3 -0
  37. package/dist/calendar/hijri/index.js +4 -0
  38. package/dist/calendar/hijri/index.js.map +1 -0
  39. package/dist/calendar/hijri/tabular-adapter.d.ts +4 -0
  40. package/dist/calendar/hijri/tabular-adapter.js +79 -0
  41. package/dist/calendar/hijri/tabular-adapter.js.map +1 -0
  42. package/dist/calendar/hijri/umm-al-qura-adapter.d.ts +4 -0
  43. package/dist/calendar/hijri/umm-al-qura-adapter.js +27 -0
  44. package/dist/calendar/hijri/umm-al-qura-adapter.js.map +1 -0
  45. package/dist/calendar/index.d.ts +13 -0
  46. package/dist/calendar/index.js +12 -0
  47. package/dist/calendar/index.js.map +1 -0
  48. package/dist/calendar/indian/adapter.d.ts +2 -0
  49. package/dist/calendar/indian/adapter.js +66 -0
  50. package/dist/calendar/indian/adapter.js.map +1 -0
  51. package/dist/calendar/indian/constants.d.ts +5 -0
  52. package/dist/calendar/indian/constants.js +43 -0
  53. package/dist/calendar/indian/constants.js.map +1 -0
  54. package/dist/calendar/indian/index.d.ts +3 -0
  55. package/dist/calendar/indian/index.js +4 -0
  56. package/dist/calendar/indian/index.js.map +1 -0
  57. package/dist/calendar/indian/validator.d.ts +6 -0
  58. package/dist/calendar/indian/validator.js +65 -0
  59. package/dist/calendar/indian/validator.js.map +1 -0
  60. package/dist/calendar/japanese/adapter.d.ts +3 -0
  61. package/dist/calendar/japanese/adapter.js +63 -0
  62. package/dist/calendar/japanese/adapter.js.map +1 -0
  63. package/dist/calendar/japanese/constants.d.ts +17 -0
  64. package/dist/calendar/japanese/constants.js +85 -0
  65. package/dist/calendar/japanese/constants.js.map +1 -0
  66. package/dist/calendar/japanese/index.d.ts +3 -0
  67. package/dist/calendar/japanese/index.js +4 -0
  68. package/dist/calendar/japanese/index.js.map +1 -0
  69. package/dist/calendar/japanese/validator.d.ts +5 -0
  70. package/dist/calendar/japanese/validator.js +76 -0
  71. package/dist/calendar/japanese/validator.js.map +1 -0
  72. package/dist/calendar/persian/adapter.d.ts +2 -0
  73. package/dist/calendar/persian/adapter.js +42 -0
  74. package/dist/calendar/persian/adapter.js.map +1 -0
  75. package/dist/calendar/persian/constants.d.ts +5 -0
  76. package/dist/calendar/persian/constants.js +43 -0
  77. package/dist/calendar/persian/constants.js.map +1 -0
  78. package/dist/calendar/persian/index.d.ts +4 -0
  79. package/dist/calendar/persian/index.js +5 -0
  80. package/dist/calendar/persian/index.js.map +1 -0
  81. package/dist/calendar/persian/math.d.ts +24 -0
  82. package/dist/calendar/persian/math.js +109 -0
  83. package/dist/calendar/persian/math.js.map +1 -0
  84. package/dist/calendar/persian/validator.d.ts +4 -0
  85. package/dist/calendar/persian/validator.js +52 -0
  86. package/dist/calendar/persian/validator.js.map +1 -0
  87. package/dist/calendar/registry.d.ts +9 -0
  88. package/dist/calendar/registry.js +119 -0
  89. package/dist/calendar/registry.js.map +1 -0
  90. package/dist/calendar/roc/adapter.d.ts +2 -0
  91. package/dist/calendar/roc/adapter.js +47 -0
  92. package/dist/calendar/roc/adapter.js.map +1 -0
  93. package/dist/calendar/roc/constants.d.ts +6 -0
  94. package/dist/calendar/roc/constants.js +34 -0
  95. package/dist/calendar/roc/constants.js.map +1 -0
  96. package/dist/calendar/roc/index.d.ts +3 -0
  97. package/dist/calendar/roc/index.js +4 -0
  98. package/dist/calendar/roc/index.js.map +1 -0
  99. package/dist/calendar/roc/validator.d.ts +4 -0
  100. package/dist/calendar/roc/validator.js +52 -0
  101. package/dist/calendar/roc/validator.js.map +1 -0
  102. package/dist/calendar/types.d.ts +34 -0
  103. package/dist/calendar/types.js +2 -0
  104. package/dist/calendar/types.js.map +1 -0
  105. package/dist/core/absolute-day.d.ts +8 -0
  106. package/dist/core/absolute-day.js +39 -0
  107. package/dist/core/absolute-day.js.map +1 -0
  108. package/dist/core/calendar-date.d.ts +11 -0
  109. package/dist/core/calendar-date.js +37 -0
  110. package/dist/core/calendar-date.js.map +1 -0
  111. package/dist/core/day-of-year.d.ts +16 -0
  112. package/dist/core/day-of-year.js +30 -0
  113. package/dist/core/day-of-year.js.map +1 -0
  114. package/dist/core/duration.d.ts +2 -0
  115. package/dist/core/duration.js +31 -0
  116. package/dist/core/duration.js.map +1 -0
  117. package/dist/core/fiscal.d.ts +31 -0
  118. package/dist/core/fiscal.js +45 -0
  119. package/dist/core/fiscal.js.map +1 -0
  120. package/dist/core/gregorian-math.d.ts +4 -0
  121. package/dist/core/gregorian-math.js +30 -0
  122. package/dist/core/gregorian-math.js.map +1 -0
  123. package/dist/core/instant.d.ts +6 -0
  124. package/dist/core/instant.js +26 -0
  125. package/dist/core/instant.js.map +1 -0
  126. package/dist/core/integer.d.ts +1 -0
  127. package/dist/core/integer.js +7 -0
  128. package/dist/core/integer.js.map +1 -0
  129. package/dist/core/iso-week.d.ts +19 -0
  130. package/dist/core/iso-week.js +41 -0
  131. package/dist/core/iso-week.js.map +1 -0
  132. package/dist/core/julian-day.d.ts +26 -0
  133. package/dist/core/julian-day.js +35 -0
  134. package/dist/core/julian-day.js.map +1 -0
  135. package/dist/core/local-date-time.d.ts +2 -0
  136. package/dist/core/local-date-time.js +15 -0
  137. package/dist/core/local-date-time.js.map +1 -0
  138. package/dist/core/local-date.d.ts +2 -0
  139. package/dist/core/local-date.js +22 -0
  140. package/dist/core/local-date.js.map +1 -0
  141. package/dist/core/local-time.d.ts +2 -0
  142. package/dist/core/local-time.js +28 -0
  143. package/dist/core/local-time.js.map +1 -0
  144. package/dist/core/range.d.ts +2 -0
  145. package/dist/core/range.js +9 -0
  146. package/dist/core/range.js.map +1 -0
  147. package/dist/create-chronera.d.ts +2 -0
  148. package/dist/create-chronera.js +59 -0
  149. package/dist/create-chronera.js.map +1 -0
  150. package/dist/errors/error-codes.d.ts +1 -0
  151. package/dist/errors/error-codes.js +2 -0
  152. package/dist/errors/error-codes.js.map +1 -0
  153. package/dist/errors/errors.d.ts +16 -0
  154. package/dist/errors/errors.js +22 -0
  155. package/dist/errors/errors.js.map +1 -0
  156. package/dist/errors/index.d.ts +2 -0
  157. package/dist/errors/index.js +2 -0
  158. package/dist/errors/index.js.map +1 -0
  159. package/dist/format/format-date-range.d.ts +2 -0
  160. package/dist/format/format-date-range.js +89 -0
  161. package/dist/format/format-date-range.js.map +1 -0
  162. package/dist/format/format-date-time.d.ts +2 -0
  163. package/dist/format/format-date-time.js +51 -0
  164. package/dist/format/format-date-time.js.map +1 -0
  165. package/dist/format/format-date.d.ts +4 -0
  166. package/dist/format/format-date.js +103 -0
  167. package/dist/format/format-date.js.map +1 -0
  168. package/dist/format/format-pattern.d.ts +4 -0
  169. package/dist/format/format-pattern.js +266 -0
  170. package/dist/format/format-pattern.js.map +1 -0
  171. package/dist/format/format-relative.d.ts +2 -0
  172. package/dist/format/format-relative.js +93 -0
  173. package/dist/format/format-relative.js.map +1 -0
  174. package/dist/format/format-time.d.ts +2 -0
  175. package/dist/format/format-time.js +48 -0
  176. package/dist/format/format-time.js.map +1 -0
  177. package/dist/format/index.d.ts +13 -0
  178. package/dist/format/index.js +12 -0
  179. package/dist/format/index.js.map +1 -0
  180. package/dist/format/pattern-scanner.d.ts +8 -0
  181. package/dist/format/pattern-scanner.js +102 -0
  182. package/dist/format/pattern-scanner.js.map +1 -0
  183. package/dist/format/presets/japanese-official.d.ts +8 -0
  184. package/dist/format/presets/japanese-official.js +39 -0
  185. package/dist/format/presets/japanese-official.js.map +1 -0
  186. package/dist/format/presets/taiwan-official.d.ts +6 -0
  187. package/dist/format/presets/taiwan-official.js +23 -0
  188. package/dist/format/presets/taiwan-official.js.map +1 -0
  189. package/dist/format/presets/thai-official.d.ts +2 -0
  190. package/dist/format/presets/thai-official.js +45 -0
  191. package/dist/format/presets/thai-official.js.map +1 -0
  192. package/dist/format/presets/types.d.ts +2 -0
  193. package/dist/format/presets/types.js +2 -0
  194. package/dist/format/presets/types.js.map +1 -0
  195. package/dist/format/presets/world-locales.d.ts +29 -0
  196. package/dist/format/presets/world-locales.js +330 -0
  197. package/dist/format/presets/world-locales.js.map +1 -0
  198. package/dist/format/resolve-date-input.d.ts +9 -0
  199. package/dist/format/resolve-date-input.js +93 -0
  200. package/dist/format/resolve-date-input.js.map +1 -0
  201. package/dist/format/rfc2822.d.ts +17 -0
  202. package/dist/format/rfc2822.js +59 -0
  203. package/dist/format/rfc2822.js.map +1 -0
  204. package/dist/index.d.ts +19 -0
  205. package/dist/index.js +19 -0
  206. package/dist/index.js.map +1 -0
  207. package/dist/internal/engine.d.ts +8 -0
  208. package/dist/internal/engine.js +11 -0
  209. package/dist/internal/engine.js.map +1 -0
  210. package/dist/locale/numbering-system.d.ts +4 -0
  211. package/dist/locale/numbering-system.js +133 -0
  212. package/dist/locale/numbering-system.js.map +1 -0
  213. package/dist/locale/resolve-locale.d.ts +7 -0
  214. package/dist/locale/resolve-locale.js +51 -0
  215. package/dist/locale/resolve-locale.js.map +1 -0
  216. package/dist/locale/types.d.ts +1 -0
  217. package/dist/locale/types.js +2 -0
  218. package/dist/locale/types.js.map +1 -0
  219. package/dist/operations/arithmetic.d.ts +4 -0
  220. package/dist/operations/arithmetic.js +13 -0
  221. package/dist/operations/arithmetic.js.map +1 -0
  222. package/dist/operations/compare.d.ts +5 -0
  223. package/dist/operations/compare.js +50 -0
  224. package/dist/operations/compare.js.map +1 -0
  225. package/dist/operations/convert-calendar-date.d.ts +4 -0
  226. package/dist/operations/convert-calendar-date.js +54 -0
  227. package/dist/operations/convert-calendar-date.js.map +1 -0
  228. package/dist/operations/day-of-year.d.ts +7 -0
  229. package/dist/operations/day-of-year.js +29 -0
  230. package/dist/operations/day-of-year.js.map +1 -0
  231. package/dist/operations/fiscal.d.ts +5 -0
  232. package/dist/operations/fiscal.js +25 -0
  233. package/dist/operations/fiscal.js.map +1 -0
  234. package/dist/operations/iso-week.d.ts +9 -0
  235. package/dist/operations/iso-week.js +29 -0
  236. package/dist/operations/iso-week.js.map +1 -0
  237. package/dist/operations/julian-day.d.ts +6 -0
  238. package/dist/operations/julian-day.js +37 -0
  239. package/dist/operations/julian-day.js.map +1 -0
  240. package/dist/operations/validate.d.ts +10 -0
  241. package/dist/operations/validate.js +55 -0
  242. package/dist/operations/validate.js.map +1 -0
  243. package/dist/parse/field-normalizer.d.ts +1 -0
  244. package/dist/parse/field-normalizer.js +5 -0
  245. package/dist/parse/field-normalizer.js.map +1 -0
  246. package/dist/parse/index.d.ts +4 -0
  247. package/dist/parse/index.js +4 -0
  248. package/dist/parse/index.js.map +1 -0
  249. package/dist/parse/parse-instant.d.ts +2 -0
  250. package/dist/parse/parse-instant.js +97 -0
  251. package/dist/parse/parse-instant.js.map +1 -0
  252. package/dist/parse/parse-local-date.d.ts +2 -0
  253. package/dist/parse/parse-local-date.js +31 -0
  254. package/dist/parse/parse-local-date.js.map +1 -0
  255. package/dist/parse/pattern-parser.d.ts +2 -0
  256. package/dist/parse/pattern-parser.js +150 -0
  257. package/dist/parse/pattern-parser.js.map +1 -0
  258. package/dist/parse/safe-parse.d.ts +3 -0
  259. package/dist/parse/safe-parse.js +46 -0
  260. package/dist/parse/safe-parse.js.map +1 -0
  261. package/dist/public-types.d.ts +209 -0
  262. package/dist/public-types.js +2 -0
  263. package/dist/public-types.js.map +1 -0
  264. package/dist/runtime/bounded-lru.d.ts +11 -0
  265. package/dist/runtime/bounded-lru.js +42 -0
  266. package/dist/runtime/bounded-lru.js.map +1 -0
  267. package/dist/runtime/capabilities.d.ts +5 -0
  268. package/dist/runtime/capabilities.js +61 -0
  269. package/dist/runtime/capabilities.js.map +1 -0
  270. package/dist/runtime/intl-date-time.d.ts +11 -0
  271. package/dist/runtime/intl-date-time.js +38 -0
  272. package/dist/runtime/intl-date-time.js.map +1 -0
  273. package/dist/runtime/intl-number.d.ts +7 -0
  274. package/dist/runtime/intl-number.js +35 -0
  275. package/dist/runtime/intl-number.js.map +1 -0
  276. package/dist/runtime/intl-relative-time.d.ts +7 -0
  277. package/dist/runtime/intl-relative-time.js +35 -0
  278. package/dist/runtime/intl-relative-time.js.map +1 -0
  279. package/dist/runtime/timezone.d.ts +14 -0
  280. package/dist/runtime/timezone.js +95 -0
  281. package/dist/runtime/timezone.js.map +1 -0
  282. package/package.json +155 -0
@@ -0,0 +1,330 @@
1
+ import { findJapaneseEraForAbsoluteDay, resolveJapaneseEra, } from "../../calendar/japanese/index.js";
2
+ import { formatNumberWithSystem } from "../../locale/numbering-system.js";
3
+ // English
4
+ const EN_MONTHS = [
5
+ "January",
6
+ "February",
7
+ "March",
8
+ "April",
9
+ "May",
10
+ "June",
11
+ "July",
12
+ "August",
13
+ "September",
14
+ "October",
15
+ "November",
16
+ "December",
17
+ ];
18
+ const EN_WEEKDAYS = [
19
+ "Sunday",
20
+ "Monday",
21
+ "Tuesday",
22
+ "Wednesday",
23
+ "Thursday",
24
+ "Friday",
25
+ "Saturday",
26
+ ];
27
+ // German (DIN 5008)
28
+ const DE_MONTHS = [
29
+ "Januar",
30
+ "Februar",
31
+ "März",
32
+ "April",
33
+ "Mai",
34
+ "Juni",
35
+ "Juli",
36
+ "August",
37
+ "September",
38
+ "Oktober",
39
+ "November",
40
+ "Dezember",
41
+ ];
42
+ const DE_WEEKDAYS = [
43
+ "Sonntag",
44
+ "Montag",
45
+ "Dienstag",
46
+ "Mittwoch",
47
+ "Donnerstag",
48
+ "Freitag",
49
+ "Samstag",
50
+ ];
51
+ // French (AFNOR)
52
+ const FR_MONTHS = [
53
+ "janvier",
54
+ "février",
55
+ "mars",
56
+ "avril",
57
+ "mai",
58
+ "juin",
59
+ "juillet",
60
+ "août",
61
+ "septembre",
62
+ "octobre",
63
+ "novembre",
64
+ "décembre",
65
+ ];
66
+ const FR_WEEKDAYS = [
67
+ "dimanche",
68
+ "lundi",
69
+ "mardi",
70
+ "mercredi",
71
+ "jeudi",
72
+ "vendredi",
73
+ "samedi",
74
+ ];
75
+ // Spanish (RAE)
76
+ const ES_MONTHS = [
77
+ "enero",
78
+ "febrero",
79
+ "marzo",
80
+ "abril",
81
+ "mayo",
82
+ "junio",
83
+ "julio",
84
+ "agosto",
85
+ "septiembre",
86
+ "octubre",
87
+ "noviembre",
88
+ "diciembre",
89
+ ];
90
+ const ES_WEEKDAYS = [
91
+ "domingo",
92
+ "lunes",
93
+ "martes",
94
+ "miércoles",
95
+ "jueves",
96
+ "viernes",
97
+ "sábado",
98
+ ];
99
+ // Chinese (GB/T 7408)
100
+ const ZH_WEEKDAYS = [
101
+ "星期日",
102
+ "星期一",
103
+ "星期二",
104
+ "星期三",
105
+ "星期四",
106
+ "星期五",
107
+ "星期六",
108
+ ];
109
+ // Arabic
110
+ const AR_GREGORIAN_MONTHS = [
111
+ "يناير",
112
+ "فبراير",
113
+ "مارس",
114
+ "أبريل",
115
+ "مايو",
116
+ "يونيو",
117
+ "يوليو",
118
+ "أغسطس",
119
+ "سبتمبر",
120
+ "أكتوبر",
121
+ "نوفمبر",
122
+ "ديسمبر",
123
+ ];
124
+ export const AR_WEEKDAYS = [
125
+ "الأحد",
126
+ "الاثنين",
127
+ "الثلاثاء",
128
+ "الأربعاء",
129
+ "الخميس",
130
+ "الجمعة",
131
+ "السبت",
132
+ ];
133
+ const THAI_SHORT_MONTHS = [
134
+ "ม.ค.",
135
+ "ก.พ.",
136
+ "มี.ค.",
137
+ "เม.ย.",
138
+ "พ.ค.",
139
+ "มิ.ย.",
140
+ "ก.ค.",
141
+ "ส.ค.",
142
+ "ก.ย.",
143
+ "ต.ค.",
144
+ "พ.ย.",
145
+ "ธ.ค.",
146
+ ];
147
+ function getDowIndex(absoluteDay) {
148
+ // 1970-01-01 was Thursday (index 4 in [Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6])
149
+ return (((absoluteDay + 4) % 7) + 7) % 7;
150
+ }
151
+ function pad2(n, numberingSystem) {
152
+ const str = String(n).padStart(2, "0");
153
+ if (numberingSystem === "latn")
154
+ return str;
155
+ return formatNumberWithSystem(Number(str), numberingSystem);
156
+ }
157
+ // --- US English ---
158
+ export function formatUsStandardPreset(date, _absDay, options = {}) {
159
+ const ns = options.numberingSystem ?? "latn";
160
+ const m = pad2(date.month ?? 1, ns);
161
+ const d = pad2(date.day, ns);
162
+ const y = formatNumberWithSystem(date.year, ns);
163
+ return `${m}/${d}/${y}`;
164
+ }
165
+ export function formatUsLongPreset(date, _absDay, options = {}) {
166
+ const ns = options.numberingSystem ?? "latn";
167
+ const monthName = EN_MONTHS[(date.month ?? 1) - 1];
168
+ const dayStr = formatNumberWithSystem(date.day, ns);
169
+ const yearStr = formatNumberWithSystem(date.year, ns);
170
+ return `${monthName} ${dayStr}, ${yearStr}`;
171
+ }
172
+ export function formatUsWithWeekdayPreset(date, absDay, options = {}) {
173
+ const weekday = EN_WEEKDAYS[getDowIndex(absDay)];
174
+ const base = formatUsLongPreset(date, absDay, options);
175
+ return `${weekday}, ${base}`;
176
+ }
177
+ // --- UK English ---
178
+ export function formatUkStandardPreset(date, _absDay, options = {}) {
179
+ const ns = options.numberingSystem ?? "latn";
180
+ const d = pad2(date.day, ns);
181
+ const m = pad2(date.month ?? 1, ns);
182
+ const y = formatNumberWithSystem(date.year, ns);
183
+ return `${d}/${m}/${y}`;
184
+ }
185
+ export function formatUkLongPreset(date, _absDay, options = {}) {
186
+ const ns = options.numberingSystem ?? "latn";
187
+ const dayStr = formatNumberWithSystem(date.day, ns);
188
+ const monthName = EN_MONTHS[(date.month ?? 1) - 1];
189
+ const yearStr = formatNumberWithSystem(date.year, ns);
190
+ return `${dayStr} ${monthName} ${yearStr}`;
191
+ }
192
+ export function formatUkWithWeekdayPreset(date, absDay, options = {}) {
193
+ const weekday = EN_WEEKDAYS[getDowIndex(absDay)];
194
+ const base = formatUkLongPreset(date, absDay, options);
195
+ return `${weekday}, ${base}`;
196
+ }
197
+ // --- German (DIN 5008) ---
198
+ export function formatGermanDinStandardPreset(date, _absDay, options = {}) {
199
+ const ns = options.numberingSystem ?? "latn";
200
+ const d = pad2(date.day, ns);
201
+ const m = pad2(date.month ?? 1, ns);
202
+ const y = formatNumberWithSystem(date.year, ns);
203
+ return `${d}.${m}.${y}`;
204
+ }
205
+ export function formatGermanLongPreset(date, _absDay, options = {}) {
206
+ const ns = options.numberingSystem ?? "latn";
207
+ const dayStr = formatNumberWithSystem(date.day, ns);
208
+ const monthName = DE_MONTHS[(date.month ?? 1) - 1];
209
+ const yearStr = formatNumberWithSystem(date.year, ns);
210
+ return `${dayStr}. ${monthName} ${yearStr}`;
211
+ }
212
+ export function formatGermanWithWeekdayPreset(date, absDay, options = {}) {
213
+ const weekday = DE_WEEKDAYS[getDowIndex(absDay)];
214
+ const base = formatGermanLongPreset(date, absDay, options);
215
+ return `${weekday}, ${base}`;
216
+ }
217
+ // --- French (AFNOR) ---
218
+ export function formatFrenchStandardPreset(date, _absDay, options = {}) {
219
+ const ns = options.numberingSystem ?? "latn";
220
+ const d = pad2(date.day, ns);
221
+ const m = pad2(date.month ?? 1, ns);
222
+ const y = formatNumberWithSystem(date.year, ns);
223
+ return `${d}/${m}/${y}`;
224
+ }
225
+ export function formatFrenchLongPreset(date, _absDay, options = {}) {
226
+ const ns = options.numberingSystem ?? "latn";
227
+ const dayStr = formatNumberWithSystem(date.day, ns);
228
+ const monthName = FR_MONTHS[(date.month ?? 1) - 1];
229
+ const yearStr = formatNumberWithSystem(date.year, ns);
230
+ return `${dayStr} ${monthName} ${yearStr}`;
231
+ }
232
+ export function formatFrenchWithWeekdayPreset(date, absDay, options = {}) {
233
+ const weekday = FR_WEEKDAYS[getDowIndex(absDay)];
234
+ const base = formatFrenchLongPreset(date, absDay, options);
235
+ return `${weekday} ${base}`;
236
+ }
237
+ // --- Spanish (RAE) ---
238
+ export function formatSpanishStandardPreset(date, _absDay, options = {}) {
239
+ const ns = options.numberingSystem ?? "latn";
240
+ const d = pad2(date.day, ns);
241
+ const m = pad2(date.month ?? 1, ns);
242
+ const y = formatNumberWithSystem(date.year, ns);
243
+ return `${d}/${m}/${y}`;
244
+ }
245
+ export function formatSpanishLongPreset(date, _absDay, options = {}) {
246
+ const ns = options.numberingSystem ?? "latn";
247
+ const dayStr = formatNumberWithSystem(date.day, ns);
248
+ const monthName = ES_MONTHS[(date.month ?? 1) - 1];
249
+ const yearStr = formatNumberWithSystem(date.year, ns);
250
+ return `${dayStr} de ${monthName} de ${yearStr}`;
251
+ }
252
+ export function formatSpanishWithWeekdayPreset(date, absDay, options = {}) {
253
+ const weekday = ES_WEEKDAYS[getDowIndex(absDay)];
254
+ const base = formatSpanishLongPreset(date, absDay, options);
255
+ return `${weekday}, ${base}`;
256
+ }
257
+ // --- Chinese (GB/T 7408) ---
258
+ export function formatChineseStandardPreset(date, _absDay, options = {}) {
259
+ const ns = options.numberingSystem ?? "latn";
260
+ const y = formatNumberWithSystem(date.year, ns);
261
+ const m = formatNumberWithSystem(date.month ?? 1, ns);
262
+ const d = formatNumberWithSystem(date.day, ns);
263
+ return `${y}年${m}月${d}日`;
264
+ }
265
+ export function formatChineseWithWeekdayPreset(date, absDay, options = {}) {
266
+ const base = formatChineseStandardPreset(date, absDay, options);
267
+ const weekday = ZH_WEEKDAYS[getDowIndex(absDay)];
268
+ return `${base} ${weekday}`;
269
+ }
270
+ export function formatChineseShortPreset(date, _absDay, options = {}) {
271
+ const ns = options.numberingSystem ?? "latn";
272
+ const y = formatNumberWithSystem(date.year, ns);
273
+ const m = pad2(date.month ?? 1, ns);
274
+ const d = pad2(date.day, ns);
275
+ return `${y}/${m}/${d}`;
276
+ }
277
+ // --- Arabic ---
278
+ export function formatArabicGregorianPreset(date, _absDay, options = {}) {
279
+ const ns = options.numberingSystem ?? "arab";
280
+ const d = formatNumberWithSystem(date.day, ns);
281
+ const m = AR_GREGORIAN_MONTHS[(date.month ?? 1) - 1];
282
+ const y = formatNumberWithSystem(date.year, ns);
283
+ return `${d} ${m} ${y} م`;
284
+ }
285
+ export function formatArabicHijriPreset(date, _absDay, options = {}) {
286
+ const ns = options.numberingSystem ?? "arab";
287
+ const d = formatNumberWithSystem(date.day, ns);
288
+ const m = formatNumberWithSystem(date.month ?? 1, ns);
289
+ const y = formatNumberWithSystem(date.year, ns);
290
+ return `${d}/${m}/${y} هـ`;
291
+ }
292
+ // --- Japanese Extensions ---
293
+ export function formatJapaneseSeirekiPreset(date, _absDay, options = {}) {
294
+ const ns = options.numberingSystem ?? "latn";
295
+ const y = formatNumberWithSystem(date.year, ns);
296
+ const m = formatNumberWithSystem(date.month ?? 1, ns);
297
+ const d = formatNumberWithSystem(date.day, ns);
298
+ return `${y}年${m}月${d}日`;
299
+ }
300
+ export function formatJapaneseEraShortPreset(date, absDay, _options = {}) {
301
+ const isJap = date.calendar === "japanese";
302
+ const eraDef = (isJap ? resolveJapaneseEra(date.era) : undefined) ??
303
+ findJapaneseEraForAbsoluteDay(absDay);
304
+ const eraYear = isJap && date.eraYear !== undefined
305
+ ? date.eraYear
306
+ : date.year - eraDef.offset;
307
+ const letter = eraDef.romaji.charAt(0).toUpperCase();
308
+ const y = String(eraYear).padStart(2, "0");
309
+ const m = String(date.month ?? 1).padStart(2, "0");
310
+ const d = String(date.day).padStart(2, "0");
311
+ return `${letter}${y}.${m}.${d}`;
312
+ }
313
+ // --- Thai Extensions ---
314
+ export function formatThaiShortDatePreset(date, _absDay, options = {}) {
315
+ const ns = options.numberingSystem ?? "latn";
316
+ const beYear = date.calendar === "buddhist" ? date.year : date.year + 543;
317
+ const d = formatNumberWithSystem(date.day, ns);
318
+ const m = THAI_SHORT_MONTHS[(date.month ?? 1) - 1];
319
+ const y = formatNumberWithSystem(beYear, ns);
320
+ return `${d} ${m} ${y}`;
321
+ }
322
+ export function formatThaiSlashDatePreset(date, _absDay, options = {}) {
323
+ const ns = options.numberingSystem ?? "latn";
324
+ const beYear = date.calendar === "buddhist" ? date.year : date.year + 543;
325
+ const d = pad2(date.day, ns);
326
+ const m = pad2(date.month ?? 1, ns);
327
+ const y = formatNumberWithSystem(beYear, ns);
328
+ return `${d}/${m}/${y}`;
329
+ }
330
+ //# sourceMappingURL=world-locales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-locales.js","sourceRoot":"","sources":["../../../src/format/presets/world-locales.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findJapaneseEraForAbsoluteDay,\n resolveJapaneseEra,\n} from \"../../calendar/japanese/index.js\";\nimport { formatNumberWithSystem } from \"../../locale/numbering-system.js\";\n\nimport type { CalendarDate, NumberingSystemId } from \"../../public-types.js\";\n\nexport interface WorldPresetOptions {\n readonly numberingSystem?: NumberingSystemId;\n}\n\n// English\nconst EN_MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nconst EN_WEEKDAYS = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n] as const;\n\n// German (DIN 5008)\nconst DE_MONTHS = [\n \"Januar\",\n \"Februar\",\n \"März\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Dezember\",\n] as const;\n\nconst DE_WEEKDAYS = [\n \"Sonntag\",\n \"Montag\",\n \"Dienstag\",\n \"Mittwoch\",\n \"Donnerstag\",\n \"Freitag\",\n \"Samstag\",\n] as const;\n\n// French (AFNOR)\nconst FR_MONTHS = [\n \"janvier\",\n \"février\",\n \"mars\",\n \"avril\",\n \"mai\",\n \"juin\",\n \"juillet\",\n \"août\",\n \"septembre\",\n \"octobre\",\n \"novembre\",\n \"décembre\",\n] as const;\n\nconst FR_WEEKDAYS = [\n \"dimanche\",\n \"lundi\",\n \"mardi\",\n \"mercredi\",\n \"jeudi\",\n \"vendredi\",\n \"samedi\",\n] as const;\n\n// Spanish (RAE)\nconst ES_MONTHS = [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\",\n] as const;\n\nconst ES_WEEKDAYS = [\n \"domingo\",\n \"lunes\",\n \"martes\",\n \"miércoles\",\n \"jueves\",\n \"viernes\",\n \"sábado\",\n] as const;\n\n// Chinese (GB/T 7408)\nconst ZH_WEEKDAYS = [\n \"星期日\",\n \"星期一\",\n \"星期二\",\n \"星期三\",\n \"星期四\",\n \"星期五\",\n \"星期六\",\n] as const;\n\n// Arabic\nconst AR_GREGORIAN_MONTHS = [\n \"يناير\",\n \"فبراير\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونيو\",\n \"يوليو\",\n \"أغسطس\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n] as const;\n\nexport const AR_WEEKDAYS = [\n \"الأحد\",\n \"الاثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n] as const;\n\nconst THAI_SHORT_MONTHS = [\n \"ม.ค.\",\n \"ก.พ.\",\n \"มี.ค.\",\n \"เม.ย.\",\n \"พ.ค.\",\n \"มิ.ย.\",\n \"ก.ค.\",\n \"ส.ค.\",\n \"ก.ย.\",\n \"ต.ค.\",\n \"พ.ย.\",\n \"ธ.ค.\",\n] as const;\n\nfunction getDowIndex(absoluteDay: number): number {\n // 1970-01-01 was Thursday (index 4 in [Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6])\n return (((absoluteDay + 4) % 7) + 7) % 7;\n}\n\nfunction pad2(n: number, numberingSystem: NumberingSystemId): string {\n const str = String(n).padStart(2, \"0\");\n if (numberingSystem === \"latn\") return str;\n return formatNumberWithSystem(Number(str), numberingSystem);\n}\n\n// --- US English ---\nexport function formatUsStandardPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const m = pad2(date.month ?? 1, ns);\n const d = pad2(date.day, ns);\n const y = formatNumberWithSystem(date.year, ns);\n return `${m}/${d}/${y}`;\n}\n\nexport function formatUsLongPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const monthName = EN_MONTHS[(date.month ?? 1) - 1]!;\n const dayStr = formatNumberWithSystem(date.day, ns);\n const yearStr = formatNumberWithSystem(date.year, ns);\n return `${monthName} ${dayStr}, ${yearStr}`;\n}\n\nexport function formatUsWithWeekdayPreset(\n date: CalendarDate,\n absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const weekday = EN_WEEKDAYS[getDowIndex(absDay)]!;\n const base = formatUsLongPreset(date, absDay, options);\n return `${weekday}, ${base}`;\n}\n\n// --- UK English ---\nexport function formatUkStandardPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const d = pad2(date.day, ns);\n const m = pad2(date.month ?? 1, ns);\n const y = formatNumberWithSystem(date.year, ns);\n return `${d}/${m}/${y}`;\n}\n\nexport function formatUkLongPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const dayStr = formatNumberWithSystem(date.day, ns);\n const monthName = EN_MONTHS[(date.month ?? 1) - 1]!;\n const yearStr = formatNumberWithSystem(date.year, ns);\n return `${dayStr} ${monthName} ${yearStr}`;\n}\n\nexport function formatUkWithWeekdayPreset(\n date: CalendarDate,\n absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const weekday = EN_WEEKDAYS[getDowIndex(absDay)]!;\n const base = formatUkLongPreset(date, absDay, options);\n return `${weekday}, ${base}`;\n}\n\n// --- German (DIN 5008) ---\nexport function formatGermanDinStandardPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const d = pad2(date.day, ns);\n const m = pad2(date.month ?? 1, ns);\n const y = formatNumberWithSystem(date.year, ns);\n return `${d}.${m}.${y}`;\n}\n\nexport function formatGermanLongPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const dayStr = formatNumberWithSystem(date.day, ns);\n const monthName = DE_MONTHS[(date.month ?? 1) - 1]!;\n const yearStr = formatNumberWithSystem(date.year, ns);\n return `${dayStr}. ${monthName} ${yearStr}`;\n}\n\nexport function formatGermanWithWeekdayPreset(\n date: CalendarDate,\n absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const weekday = DE_WEEKDAYS[getDowIndex(absDay)]!;\n const base = formatGermanLongPreset(date, absDay, options);\n return `${weekday}, ${base}`;\n}\n\n// --- French (AFNOR) ---\nexport function formatFrenchStandardPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const d = pad2(date.day, ns);\n const m = pad2(date.month ?? 1, ns);\n const y = formatNumberWithSystem(date.year, ns);\n return `${d}/${m}/${y}`;\n}\n\nexport function formatFrenchLongPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const dayStr = formatNumberWithSystem(date.day, ns);\n const monthName = FR_MONTHS[(date.month ?? 1) - 1]!;\n const yearStr = formatNumberWithSystem(date.year, ns);\n return `${dayStr} ${monthName} ${yearStr}`;\n}\n\nexport function formatFrenchWithWeekdayPreset(\n date: CalendarDate,\n absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const weekday = FR_WEEKDAYS[getDowIndex(absDay)]!;\n const base = formatFrenchLongPreset(date, absDay, options);\n return `${weekday} ${base}`;\n}\n\n// --- Spanish (RAE) ---\nexport function formatSpanishStandardPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const d = pad2(date.day, ns);\n const m = pad2(date.month ?? 1, ns);\n const y = formatNumberWithSystem(date.year, ns);\n return `${d}/${m}/${y}`;\n}\n\nexport function formatSpanishLongPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const dayStr = formatNumberWithSystem(date.day, ns);\n const monthName = ES_MONTHS[(date.month ?? 1) - 1]!;\n const yearStr = formatNumberWithSystem(date.year, ns);\n return `${dayStr} de ${monthName} de ${yearStr}`;\n}\n\nexport function formatSpanishWithWeekdayPreset(\n date: CalendarDate,\n absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const weekday = ES_WEEKDAYS[getDowIndex(absDay)]!;\n const base = formatSpanishLongPreset(date, absDay, options);\n return `${weekday}, ${base}`;\n}\n\n// --- Chinese (GB/T 7408) ---\nexport function formatChineseStandardPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const y = formatNumberWithSystem(date.year, ns);\n const m = formatNumberWithSystem(date.month ?? 1, ns);\n const d = formatNumberWithSystem(date.day, ns);\n return `${y}年${m}月${d}日`;\n}\n\nexport function formatChineseWithWeekdayPreset(\n date: CalendarDate,\n absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const base = formatChineseStandardPreset(date, absDay, options);\n const weekday = ZH_WEEKDAYS[getDowIndex(absDay)]!;\n return `${base} ${weekday}`;\n}\n\nexport function formatChineseShortPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const y = formatNumberWithSystem(date.year, ns);\n const m = pad2(date.month ?? 1, ns);\n const d = pad2(date.day, ns);\n return `${y}/${m}/${d}`;\n}\n\n// --- Arabic ---\nexport function formatArabicGregorianPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"arab\";\n const d = formatNumberWithSystem(date.day, ns);\n const m = AR_GREGORIAN_MONTHS[(date.month ?? 1) - 1]!;\n const y = formatNumberWithSystem(date.year, ns);\n return `${d} ${m} ${y} م`;\n}\n\nexport function formatArabicHijriPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"arab\";\n const d = formatNumberWithSystem(date.day, ns);\n const m = formatNumberWithSystem(date.month ?? 1, ns);\n const y = formatNumberWithSystem(date.year, ns);\n return `${d}/${m}/${y} هـ`;\n}\n\n// --- Japanese Extensions ---\nexport function formatJapaneseSeirekiPreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const y = formatNumberWithSystem(date.year, ns);\n const m = formatNumberWithSystem(date.month ?? 1, ns);\n const d = formatNumberWithSystem(date.day, ns);\n return `${y}年${m}月${d}日`;\n}\n\nexport function formatJapaneseEraShortPreset(\n date: CalendarDate,\n absDay: number,\n _options: WorldPresetOptions = {},\n): string {\n const isJap = date.calendar === \"japanese\";\n const eraDef =\n (isJap ? resolveJapaneseEra(date.era) : undefined) ??\n findJapaneseEraForAbsoluteDay(absDay);\n const eraYear =\n isJap && date.eraYear !== undefined\n ? date.eraYear\n : date.year - eraDef.offset;\n\n const letter = eraDef.romaji.charAt(0).toUpperCase();\n const y = String(eraYear).padStart(2, \"0\");\n const m = String(date.month ?? 1).padStart(2, \"0\");\n const d = String(date.day).padStart(2, \"0\");\n return `${letter}${y}.${m}.${d}`;\n}\n\n// --- Thai Extensions ---\nexport function formatThaiShortDatePreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const beYear = date.calendar === \"buddhist\" ? date.year : date.year + 543;\n const d = formatNumberWithSystem(date.day, ns);\n const m = THAI_SHORT_MONTHS[(date.month ?? 1) - 1]!;\n const y = formatNumberWithSystem(beYear, ns);\n return `${d} ${m} ${y}`;\n}\n\nexport function formatThaiSlashDatePreset(\n date: CalendarDate,\n _absDay: number,\n options: WorldPresetOptions = {},\n): string {\n const ns = options.numberingSystem ?? \"latn\";\n const beYear = date.calendar === \"buddhist\" ? date.year : date.year + 543;\n const d = pad2(date.day, ns);\n const m = pad2(date.month ?? 1, ns);\n const y = formatNumberWithSystem(beYear, ns);\n return `${d}/${m}/${y}`;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { CalendarRegistry } from "../calendar/registry.js";
2
+ import type { CalendarDate, FormatDateBaseOptions, FormatDateInput, Instant, TimeZoneId } from "../public-types.js";
3
+ export interface ResolvedDateFormattingInput {
4
+ calendarDate: CalendarDate;
5
+ instant?: Instant;
6
+ absoluteDay: number;
7
+ timeZone?: TimeZoneId;
8
+ }
9
+ export declare function resolveDateFormattingInput(registry: CalendarRegistry, input: FormatDateInput, options?: Readonly<FormatDateBaseOptions>): ResolvedDateFormattingInput;
@@ -0,0 +1,93 @@
1
+ import { ChroneraError } from "../errors/errors.js";
2
+ import { instantFromDate } from "../core/instant.js";
3
+ import { projectInstantToZonedFields } from "../runtime/timezone.js";
4
+ import { formatGregorianMonthCode } from "../core/gregorian-math.js";
5
+ import { convertCalendarDateWithRegistry } from "../operations/convert-calendar-date.js";
6
+ import { absoluteDayFromGregorianFields } from "../core/absolute-day.js";
7
+ export function resolveDateFormattingInput(registry, input, options = {}) {
8
+ const targetCalendar = options.calendar;
9
+ // Date-only input (LocalDate)
10
+ if ("kind" in input && input.kind === "local-date") {
11
+ if (options.timeZone !== undefined) {
12
+ throw new ChroneraError("CHRONERA_INCOMPATIBLE_OPTION", "Timezone option is forbidden for date-only inputs.");
13
+ }
14
+ const monthCode = formatGregorianMonthCode(input.month);
15
+ let calDate = {
16
+ kind: "calendar-date",
17
+ calendar: "gregory",
18
+ year: input.year,
19
+ monthCode,
20
+ month: input.month,
21
+ day: input.day,
22
+ era: "CE",
23
+ eraYear: input.year,
24
+ };
25
+ if (targetCalendar &&
26
+ targetCalendar !== "gregory" &&
27
+ targetCalendar !== "iso8601") {
28
+ const conv = convertCalendarDateWithRegistry(registry, calDate, targetCalendar);
29
+ calDate = conv.value;
30
+ }
31
+ const absDay = absoluteDayFromGregorianFields(input.year, input.month, input.day);
32
+ return {
33
+ calendarDate: calDate,
34
+ absoluteDay: absDay,
35
+ };
36
+ }
37
+ // CalendarDate input
38
+ if ("kind" in input && input.kind === "calendar-date") {
39
+ if (options.timeZone !== undefined) {
40
+ throw new ChroneraError("CHRONERA_INCOMPATIBLE_OPTION", "Timezone option is forbidden for calendar date inputs.");
41
+ }
42
+ let calDate = input;
43
+ if (targetCalendar && targetCalendar !== input.calendar) {
44
+ const conv = convertCalendarDateWithRegistry(registry, input, targetCalendar);
45
+ calDate = conv.value;
46
+ }
47
+ const adapter = registry.getAdapter(calDate.calendar);
48
+ if (!adapter.converter) {
49
+ throw new ChroneraError("CHRONERA_UNSUPPORTED_OPERATION", `Calendar "${calDate.calendar}" does not support conversion to absolute day.`);
50
+ }
51
+ const absDay = adapter.converter.toAbsoluteDay(calDate);
52
+ return {
53
+ calendarDate: calDate,
54
+ absoluteDay: absDay,
55
+ };
56
+ }
57
+ // Instant or Date input
58
+ let instant;
59
+ if ("kind" in input && input.kind === "instant") {
60
+ instant = input;
61
+ }
62
+ else if (input instanceof Date) {
63
+ instant = instantFromDate(input);
64
+ }
65
+ else {
66
+ throw new ChroneraError("CHRONERA_INVALID_DATE", "Expected LocalDate, CalendarDate, Instant, or Date.");
67
+ }
68
+ const timeZone = options.timeZone ?? "UTC";
69
+ const calId = targetCalendar ?? "gregory";
70
+ const zonedFields = projectInstantToZonedFields(instant, timeZone);
71
+ let calDate = {
72
+ kind: "calendar-date",
73
+ calendar: "gregory",
74
+ year: zonedFields.year,
75
+ monthCode: formatGregorianMonthCode(zonedFields.month),
76
+ month: zonedFields.month,
77
+ day: zonedFields.day,
78
+ eraYear: zonedFields.year,
79
+ ...(zonedFields.era !== undefined ? { era: zonedFields.era } : {}),
80
+ };
81
+ if (calId !== "gregory" && calId !== "iso8601") {
82
+ const conv = convertCalendarDateWithRegistry(registry, calDate, calId);
83
+ calDate = conv.value;
84
+ }
85
+ const absDay = absoluteDayFromGregorianFields(zonedFields.year, zonedFields.month, zonedFields.day);
86
+ return {
87
+ calendarDate: calDate,
88
+ instant,
89
+ absoluteDay: absDay,
90
+ timeZone,
91
+ };
92
+ }
93
+ //# sourceMappingURL=resolve-date-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-date-input.js","sourceRoot":"","sources":["../../src/format/resolve-date-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChroneraError } from \"../errors/errors.js\";\nimport { instantFromDate } from \"../core/instant.js\";\nimport { projectInstantToZonedFields } from \"../runtime/timezone.js\";\nimport { formatGregorianMonthCode } from \"../core/gregorian-math.js\";\nimport { convertCalendarDateWithRegistry } from \"../operations/convert-calendar-date.js\";\nimport { absoluteDayFromGregorianFields } from \"../core/absolute-day.js\";\n\nimport type { CalendarRegistry } from \"../calendar/registry.js\";\nimport type {\n CalendarDate,\n CalendarId,\n FormatDateBaseOptions,\n FormatDateInput,\n Instant,\n TimeZoneId,\n} from \"../public-types.js\";\n\nexport interface ResolvedDateFormattingInput {\n calendarDate: CalendarDate;\n instant?: Instant;\n absoluteDay: number;\n timeZone?: TimeZoneId;\n}\n\nexport function resolveDateFormattingInput(\n registry: CalendarRegistry,\n input: FormatDateInput,\n options: Readonly<FormatDateBaseOptions> = {},\n): ResolvedDateFormattingInput {\n const targetCalendar = options.calendar;\n\n // Date-only input (LocalDate)\n if (\"kind\" in input && input.kind === \"local-date\") {\n if (options.timeZone !== undefined) {\n throw new ChroneraError(\n \"CHRONERA_INCOMPATIBLE_OPTION\",\n \"Timezone option is forbidden for date-only inputs.\",\n );\n }\n\n const monthCode = formatGregorianMonthCode(input.month);\n let calDate: CalendarDate = {\n kind: \"calendar-date\",\n calendar: \"gregory\",\n year: input.year,\n monthCode,\n month: input.month,\n day: input.day,\n era: \"CE\",\n eraYear: input.year,\n };\n\n if (\n targetCalendar &&\n targetCalendar !== \"gregory\" &&\n targetCalendar !== \"iso8601\"\n ) {\n const conv = convertCalendarDateWithRegistry(\n registry,\n calDate,\n targetCalendar,\n );\n calDate = conv.value;\n }\n\n const absDay = absoluteDayFromGregorianFields(\n input.year,\n input.month,\n input.day,\n );\n return {\n calendarDate: calDate,\n absoluteDay: absDay,\n };\n }\n\n // CalendarDate input\n if (\"kind\" in input && input.kind === \"calendar-date\") {\n if (options.timeZone !== undefined) {\n throw new ChroneraError(\n \"CHRONERA_INCOMPATIBLE_OPTION\",\n \"Timezone option is forbidden for calendar date inputs.\",\n );\n }\n\n let calDate = input;\n if (targetCalendar && targetCalendar !== input.calendar) {\n const conv = convertCalendarDateWithRegistry(\n registry,\n input,\n targetCalendar,\n );\n calDate = conv.value;\n }\n\n const adapter = registry.getAdapter(calDate.calendar);\n if (!adapter.converter) {\n throw new ChroneraError(\n \"CHRONERA_UNSUPPORTED_OPERATION\",\n `Calendar \"${calDate.calendar}\" does not support conversion to absolute day.`,\n );\n }\n const absDay = adapter.converter.toAbsoluteDay(calDate);\n\n return {\n calendarDate: calDate,\n absoluteDay: absDay,\n };\n }\n\n // Instant or Date input\n let instant: Instant;\n if (\"kind\" in input && input.kind === \"instant\") {\n instant = input;\n } else if (input instanceof Date) {\n instant = instantFromDate(input);\n } else {\n throw new ChroneraError(\n \"CHRONERA_INVALID_DATE\",\n \"Expected LocalDate, CalendarDate, Instant, or Date.\",\n );\n }\n\n const timeZone: TimeZoneId = options.timeZone ?? \"UTC\";\n const calId: CalendarId = targetCalendar ?? \"gregory\";\n\n const zonedFields = projectInstantToZonedFields(instant, timeZone);\n let calDate: CalendarDate = {\n kind: \"calendar-date\",\n calendar: \"gregory\",\n year: zonedFields.year,\n monthCode: formatGregorianMonthCode(zonedFields.month),\n month: zonedFields.month,\n day: zonedFields.day,\n eraYear: zonedFields.year,\n ...(zonedFields.era !== undefined ? { era: zonedFields.era } : {}),\n };\n\n if (calId !== \"gregory\" && calId !== \"iso8601\") {\n const conv = convertCalendarDateWithRegistry(registry, calDate, calId);\n calDate = conv.value;\n }\n\n const absDay = absoluteDayFromGregorianFields(\n zonedFields.year,\n zonedFields.month,\n zonedFields.day,\n );\n\n return {\n calendarDate: calDate,\n instant,\n absoluteDay: absDay,\n timeZone,\n };\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { Instant } from "../public-types.js";
2
+ export interface Rfc2822Options {
3
+ /**
4
+ * If true and offset is 0, renders 'GMT' instead of '+0000' (RFC 7231 / RFC 9110 HTTP-date compliance).
5
+ * Defaults to true.
6
+ */
7
+ readonly useGmt?: boolean;
8
+ /**
9
+ * Whether to include seconds. Defaults to true.
10
+ */
11
+ readonly includeSeconds?: boolean;
12
+ }
13
+ /**
14
+ * Formats an Instant into an RFC 2822 / RFC 5322 / RFC 7231 compliant date-time string.
15
+ * Example: 'Wed, 02 Sep 2026 14:30:00 GMT' or 'Wed, 02 Sep 2026 14:30:00 +0000'
16
+ */
17
+ export declare function formatRfc2822(instant: Instant, options?: Rfc2822Options): string;
@@ -0,0 +1,59 @@
1
+ import { gregorianFieldsFromAbsoluteDay } from "../core/absolute-day.js";
2
+ import { getIsoDayOfWeek } from "../core/iso-week.js";
3
+ const RFC2822_WEEKDAYS = [
4
+ "Mon",
5
+ "Tue",
6
+ "Wed",
7
+ "Thu",
8
+ "Fri",
9
+ "Sat",
10
+ "Sun",
11
+ ];
12
+ const RFC2822_MONTHS = [
13
+ "Jan",
14
+ "Feb",
15
+ "Mar",
16
+ "Apr",
17
+ "May",
18
+ "Jun",
19
+ "Jul",
20
+ "Aug",
21
+ "Sep",
22
+ "Oct",
23
+ "Nov",
24
+ "Dec",
25
+ ];
26
+ /**
27
+ * Formats an Instant into an RFC 2822 / RFC 5322 / RFC 7231 compliant date-time string.
28
+ * Example: 'Wed, 02 Sep 2026 14:30:00 GMT' or 'Wed, 02 Sep 2026 14:30:00 +0000'
29
+ */
30
+ export function formatRfc2822(instant, options = {}) {
31
+ const useGmt = options.useGmt ?? true;
32
+ const includeSeconds = options.includeSeconds ?? true;
33
+ const ms = instant.epochMilliseconds;
34
+ const totalSeconds = Math.floor(ms / 1000);
35
+ const absoluteDay = Math.floor(totalSeconds / 86400);
36
+ // Time within day
37
+ let secondOfDay = totalSeconds % 86400;
38
+ if (secondOfDay < 0) {
39
+ secondOfDay += 86400;
40
+ }
41
+ const hour = Math.floor(secondOfDay / 3600);
42
+ const minute = Math.floor((secondOfDay % 3600) / 60);
43
+ const second = secondOfDay % 60;
44
+ const dateFields = gregorianFieldsFromAbsoluteDay(absoluteDay);
45
+ const isoDow = getIsoDayOfWeek(absoluteDay); // 1 = Mon .. 7 = Sun
46
+ const weekdayName = RFC2822_WEEKDAYS[isoDow - 1];
47
+ const monthName = RFC2822_MONTHS[dateFields.month - 1];
48
+ const dayStr = String(dateFields.day).padStart(2, "0");
49
+ const yearStr = String(dateFields.year).padStart(4, "0");
50
+ const hourStr = String(hour).padStart(2, "0");
51
+ const minStr = String(minute).padStart(2, "0");
52
+ const secStr = String(second).padStart(2, "0");
53
+ const timePart = includeSeconds
54
+ ? `${hourStr}:${minStr}:${secStr}`
55
+ : `${hourStr}:${minStr}`;
56
+ const zonePart = useGmt ? "GMT" : "+0000";
57
+ return `${weekdayName}, ${dayStr} ${monthName} ${yearStr} ${timePart} ${zonePart}`;
58
+ }
59
+ //# sourceMappingURL=rfc2822.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfc2822.js","sourceRoot":"","sources":["../../src/format/rfc2822.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,gBAAgB,GAAG;IACvB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAC;AAEX,MAAM,cAAc,GAAG;IACrB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAC;AAeX;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,UAA0B,EAAE;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IAEtD,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;IAErD,kBAAkB;IAClB,IAAI,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC;IACvC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,WAAW,IAAI,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,WAAW,GAAG,EAAE,CAAC;IAEhC,MAAM,UAAU,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB;IAClE,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,cAAc;QAC7B,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,IAAI,MAAM,EAAE;QAClC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAE1C,OAAO,GAAG,WAAW,KAAK,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACrF,CAAC","sourcesContent":["import { gregorianFieldsFromAbsoluteDay } from \"../core/absolute-day.js\";\nimport { getIsoDayOfWeek } from \"../core/iso-week.js\";\n\nimport type { Instant } from \"../public-types.js\";\n\nconst RFC2822_WEEKDAYS = [\n \"Mon\",\n \"Tue\",\n \"Wed\",\n \"Thu\",\n \"Fri\",\n \"Sat\",\n \"Sun\",\n] as const;\n\nconst RFC2822_MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n] as const;\n\nexport interface Rfc2822Options {\n /**\n * If true and offset is 0, renders 'GMT' instead of '+0000' (RFC 7231 / RFC 9110 HTTP-date compliance).\n * Defaults to true.\n */\n readonly useGmt?: boolean;\n\n /**\n * Whether to include seconds. Defaults to true.\n */\n readonly includeSeconds?: boolean;\n}\n\n/**\n * Formats an Instant into an RFC 2822 / RFC 5322 / RFC 7231 compliant date-time string.\n * Example: 'Wed, 02 Sep 2026 14:30:00 GMT' or 'Wed, 02 Sep 2026 14:30:00 +0000'\n */\nexport function formatRfc2822(\n instant: Instant,\n options: Rfc2822Options = {},\n): string {\n const useGmt = options.useGmt ?? true;\n const includeSeconds = options.includeSeconds ?? true;\n\n const ms = instant.epochMilliseconds;\n const totalSeconds = Math.floor(ms / 1000);\n const absoluteDay = Math.floor(totalSeconds / 86400);\n\n // Time within day\n let secondOfDay = totalSeconds % 86400;\n if (secondOfDay < 0) {\n secondOfDay += 86400;\n }\n\n const hour = Math.floor(secondOfDay / 3600);\n const minute = Math.floor((secondOfDay % 3600) / 60);\n const second = secondOfDay % 60;\n\n const dateFields = gregorianFieldsFromAbsoluteDay(absoluteDay);\n const isoDow = getIsoDayOfWeek(absoluteDay); // 1 = Mon .. 7 = Sun\n const weekdayName = RFC2822_WEEKDAYS[isoDow - 1]!;\n const monthName = RFC2822_MONTHS[dateFields.month - 1]!;\n\n const dayStr = String(dateFields.day).padStart(2, \"0\");\n const yearStr = String(dateFields.year).padStart(4, \"0\");\n const hourStr = String(hour).padStart(2, \"0\");\n const minStr = String(minute).padStart(2, \"0\");\n const secStr = String(second).padStart(2, \"0\");\n\n const timePart = includeSeconds\n ? `${hourStr}:${minStr}:${secStr}`\n : `${hourStr}:${minStr}`;\n\n const zonePart = useGmt ? \"GMT\" : \"+0000\";\n\n return `${weekdayName}, ${dayStr} ${monthName} ${yearStr} ${timePart} ${zonePart}`;\n}\n"]}
@@ -0,0 +1,19 @@
1
+ export { createChronera } from "./create-chronera.js";
2
+ export { compareInstants, compareLocalDates, sameAbsoluteDate, sameCalendarDate, } from "./operations/compare.js";
3
+ export { convertCalendarDate } from "./operations/convert-calendar-date.js";
4
+ export { daysInMonth, getCalendarCapabilities, isLeapYear, isValidCalendarDate, } from "./operations/validate.js";
5
+ export { getIsoWeek, formatIsoWeek } from "./operations/iso-week.js";
6
+ export { getDayOfYear, getDayOfYearWithRegistry, formatOrdinalDate, } from "./operations/day-of-year.js";
7
+ export { toJulianDayNumber, toModifiedJulianDay, localDateFromJulianDayNumber, localDateFromModifiedJulianDay, } from "./operations/julian-day.js";
8
+ export { getQuarter, getFiscalYear } from "./operations/fiscal.js";
9
+ export { formatDate, formatDateRange, formatDateTime, formatRelative, formatTime, formatWithPattern, formatRfc2822, formatJapaneseOfficialPreset, formatJapaneseOfficialWithWeekdayPreset, formatTaiwanOfficialPreset, formatThaiOfficialPreset, formatArabicGregorianPreset, formatArabicHijriPreset, formatChineseShortPreset, formatChineseStandardPreset, formatChineseWithWeekdayPreset, formatFrenchLongPreset, formatFrenchStandardPreset, formatFrenchWithWeekdayPreset, formatGermanDinStandardPreset, formatGermanLongPreset, formatGermanWithWeekdayPreset, formatJapaneseEraShortPreset, formatJapaneseSeirekiPreset, formatSpanishLongPreset, formatSpanishStandardPreset, formatSpanishWithWeekdayPreset, formatThaiShortDatePreset, formatThaiSlashDatePreset, formatUkLongPreset, formatUkStandardPreset, formatUkWithWeekdayPreset, formatUsLongPreset, formatUsStandardPreset, formatUsWithWeekdayPreset, } from "./format/index.js";
10
+ export { parseInstant, parseLocalDate, safeParseInstant, safeParseLocalDate, } from "./parse/index.js";
11
+ export { instantFromDate, instantFromEpochMilliseconds, instantFromEpochSeconds, } from "./core/instant.js";
12
+ export { getRuntimeCapabilities } from "./runtime/capabilities.js";
13
+ export { calendarDate } from "./core/calendar-date.js";
14
+ export { localDate } from "./core/local-date.js";
15
+ export { localTime } from "./core/local-time.js";
16
+ export { localDateTime } from "./core/local-date-time.js";
17
+ export { dateRange } from "./core/range.js";
18
+ export { ChroneraError, ChroneraParseError, ChroneraRangeError, ChroneraUnsupportedError, } from "./errors/index.js";
19
+ export type { BuiltInCalendarId, CalendarPlugin, CalendarCapabilities, CalendarConversionMetadata, CalendarConversionResult, CalendarDate, CalendarId, ChroneraErrorCode, ChroneraConfig, ChroneraInstance, ChroneraIssue, Comparison, ConvertCalendarOptions, DateRange, DayOfYearFields, Duration, EraId, FiscalFields, FiscalOptions, FormatDateBaseOptions, FormatDateInput, FormatDateOptions, FormatDateRangeOptions, FormatDateTimeOptions, FormatRelativeOptions, FormatTimeOptions, Instant, IsoWeekFields, LocalDate, LocalDateTime, LocalTime, LocaleId, MonthCode, NumberingSystemId, PatternFormatOptions, ParseInstantOptions, ParseLocalDateOptions, PresetName, QuarterNumber, ResolvedChroneraOptions, Rfc2822Options, RuntimeCapabilities, SafeParseResult, TimeZoneId, ZonedDateTime, } from "./public-types.js";
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ export { createChronera } from "./create-chronera.js";
2
+ export { compareInstants, compareLocalDates, sameAbsoluteDate, sameCalendarDate, } from "./operations/compare.js";
3
+ export { convertCalendarDate } from "./operations/convert-calendar-date.js";
4
+ export { daysInMonth, getCalendarCapabilities, isLeapYear, isValidCalendarDate, } from "./operations/validate.js";
5
+ export { getIsoWeek, formatIsoWeek } from "./operations/iso-week.js";
6
+ export { getDayOfYear, getDayOfYearWithRegistry, formatOrdinalDate, } from "./operations/day-of-year.js";
7
+ export { toJulianDayNumber, toModifiedJulianDay, localDateFromJulianDayNumber, localDateFromModifiedJulianDay, } from "./operations/julian-day.js";
8
+ export { getQuarter, getFiscalYear } from "./operations/fiscal.js";
9
+ export { formatDate, formatDateRange, formatDateTime, formatRelative, formatTime, formatWithPattern, formatRfc2822, formatJapaneseOfficialPreset, formatJapaneseOfficialWithWeekdayPreset, formatTaiwanOfficialPreset, formatThaiOfficialPreset, formatArabicGregorianPreset, formatArabicHijriPreset, formatChineseShortPreset, formatChineseStandardPreset, formatChineseWithWeekdayPreset, formatFrenchLongPreset, formatFrenchStandardPreset, formatFrenchWithWeekdayPreset, formatGermanDinStandardPreset, formatGermanLongPreset, formatGermanWithWeekdayPreset, formatJapaneseEraShortPreset, formatJapaneseSeirekiPreset, formatSpanishLongPreset, formatSpanishStandardPreset, formatSpanishWithWeekdayPreset, formatThaiShortDatePreset, formatThaiSlashDatePreset, formatUkLongPreset, formatUkStandardPreset, formatUkWithWeekdayPreset, formatUsLongPreset, formatUsStandardPreset, formatUsWithWeekdayPreset, } from "./format/index.js";
10
+ export { parseInstant, parseLocalDate, safeParseInstant, safeParseLocalDate, } from "./parse/index.js";
11
+ export { instantFromDate, instantFromEpochMilliseconds, instantFromEpochSeconds, } from "./core/instant.js";
12
+ export { getRuntimeCapabilities } from "./runtime/capabilities.js";
13
+ export { calendarDate } from "./core/calendar-date.js";
14
+ export { localDate } from "./core/local-date.js";
15
+ export { localTime } from "./core/local-time.js";
16
+ export { localDateTime } from "./core/local-date-time.js";
17
+ export { dateRange } from "./core/range.js";
18
+ export { ChroneraError, ChroneraParseError, ChroneraRangeError, ChroneraUnsupportedError, } from "./errors/index.js";
19
+ //# sourceMappingURL=index.js.map