@hebcal/core 5.0.1 → 5.0.3

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.
@@ -1,348 +1,6 @@
1
- /*! @hebcal/core v5.0.1 */
1
+ /*! @hebcal/core v5.0.3 */
2
2
  'use strict';
3
3
 
4
- const GERESH = '׳';
5
- const GERSHAYIM = '״';
6
- const heb2num = {
7
- 'א': 1,
8
- 'ב': 2,
9
- 'ג': 3,
10
- 'ד': 4,
11
- 'ה': 5,
12
- 'ו': 6,
13
- 'ז': 7,
14
- 'ח': 8,
15
- 'ט': 9,
16
- 'י': 10,
17
- 'כ': 20,
18
- 'ל': 30,
19
- 'מ': 40,
20
- 'נ': 50,
21
- 'ס': 60,
22
- 'ע': 70,
23
- 'פ': 80,
24
- 'צ': 90,
25
- 'ק': 100,
26
- 'ר': 200,
27
- 'ש': 300,
28
- 'ת': 400
29
- };
30
- const num2heb = new Map();
31
- for (const [key, val] of Object.entries(heb2num)) {
32
- num2heb.set(val, key);
33
- }
34
-
35
- /**
36
- * @private
37
- * @param {number} num
38
- * @return {number[]}
39
- */
40
- function num2digits(num) {
41
- const digits = [];
42
- while (num > 0) {
43
- if (num === 15 || num === 16) {
44
- digits.push(9);
45
- digits.push(num - 9);
46
- break;
47
- }
48
- let incr = 100;
49
- let i;
50
- for (i = 400; i > num; i -= incr) {
51
- if (i === incr) {
52
- incr = incr / 10;
53
- }
54
- }
55
- digits.push(i);
56
- num -= i;
57
- }
58
- return digits;
59
- }
60
-
61
- /**
62
- * Converts a numerical value to a string of Hebrew letters.
63
- *
64
- * When specifying years of the Hebrew calendar in the present millennium,
65
- * we omit the thousands (which is presently 5 [ה]).
66
- * @example
67
- * gematriya(5774) // 'תשע״ד' - cropped to 774
68
- * gematriya(25) // 'כ״ה'
69
- * gematriya(60) // 'ס׳'
70
- * gematriya(3761) // 'ג׳תשס״א'
71
- * gematriya(1123) // 'א׳קכ״ג'
72
- * @param {number} number
73
- * @return {string}
74
- */
75
- function gematriya(number) {
76
- const num = parseInt(number, 10);
77
- if (!num) {
78
- throw new TypeError(`invalid parameter to gematriya ${number}`);
79
- }
80
- let str = '';
81
- const thousands = Math.floor(num / 1000);
82
- if (thousands > 0 && thousands !== 5) {
83
- const tdigits = num2digits(thousands);
84
- for (const tdig of tdigits) {
85
- str += num2heb.get(tdig);
86
- }
87
- str += GERESH;
88
- }
89
- const digits = num2digits(num % 1000);
90
- if (digits.length == 1) {
91
- return str + num2heb.get(digits[0]) + GERESH;
92
- }
93
- for (let i = 0; i < digits.length; i++) {
94
- if (i + 1 === digits.length) {
95
- str += GERSHAYIM;
96
- }
97
- str += num2heb.get(digits[i]);
98
- }
99
- return str;
100
- }
101
-
102
- /**
103
- * Converts a string of Hebrew letters to a numerical value.
104
- *
105
- * Only considers the value of Hebrew letters `א` through `ת`.
106
- * Ignores final Hebrew letters such as `ך` (kaf sofit) or `ם` (mem sofit)
107
- * and vowels (nekudot).
108
- *
109
- * @param {string} str
110
- * @return {number}
111
- */
112
- function gematriyaStrToNum(str) {
113
- let num = 0;
114
- const gereshIdx = str.indexOf(GERESH);
115
- if (gereshIdx !== -1 && gereshIdx !== str.length - 1) {
116
- const thousands = str.substring(0, gereshIdx);
117
- num += gematriyaStrToNum(thousands) * 1000;
118
- str = str.substring(gereshIdx);
119
- }
120
- for (const ch of str) {
121
- const n = heb2num[ch];
122
- if (typeof n === 'number') {
123
- num += n;
124
- }
125
- }
126
- return num;
127
- }
128
-
129
- const noopLocale = {
130
- headers: {
131
- 'plural-forms': 'nplurals=2; plural=(n!=1);'
132
- },
133
- contexts: {
134
- '': {}
135
- }
136
- };
137
- const alias = {
138
- 'h': 'he',
139
- 'a': 'ashkenazi',
140
- 's': 'en',
141
- '': 'en'
142
- };
143
-
144
- /** @private */
145
- const locales = new Map();
146
- /** @private */
147
- let activeLocale = null;
148
- /** @private */
149
- let activeName = null;
150
-
151
- /**
152
- * A locale in Hebcal is used for translations/transliterations of
153
- * holidays. `@hebcal/core` supports four locales by default
154
- * * `en` - default, Sephardic transliterations (e.g. "Shabbat")
155
- * * `ashkenazi` - Ashkenazi transliterations (e.g. "Shabbos")
156
- * * `he` - Hebrew (e.g. "שַׁבָּת")
157
- * * `he-x-NoNikud` - Hebrew without nikud (e.g. "שבת")
158
- */
159
- class Locale {
160
- /**
161
- * Returns translation only if `locale` offers a non-empty translation for `id`.
162
- * Otherwise, returns `undefined`.
163
- * @param {string} id Message ID to translate
164
- * @param {string} [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale.
165
- * @return {string}
166
- */
167
- static lookupTranslation(id, locale) {
168
- const locale0 = locale === null || locale === void 0 ? void 0 : locale.toLowerCase();
169
- const loc = typeof locale == 'string' && locales.get(locale0) || activeLocale;
170
- const array = loc[id];
171
- if (array && array.length && array[0].length) {
172
- return array[0];
173
- }
174
- return undefined;
175
- }
176
-
177
- /**
178
- * By default, if no translation was found, returns `id`.
179
- * @param {string} id Message ID to translate
180
- * @param {string} [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale.
181
- * @return {string}
182
- */
183
- static gettext(id, locale) {
184
- const text = this.lookupTranslation(id, locale);
185
- if (typeof text == 'undefined') {
186
- return id;
187
- }
188
- return text;
189
- }
190
-
191
- /**
192
- * Register locale translations.
193
- * @param {string} locale Locale name (i.e.: `'he'`, `'fr'`)
194
- * @param {LocaleData} data parsed data from a `.po` file.
195
- */
196
- static addLocale(locale, data) {
197
- if (typeof locale !== 'string') {
198
- throw new TypeError(`Invalid locale name: ${locale}`);
199
- }
200
- if (typeof data.contexts !== 'object' || typeof data.contexts[''] !== 'object') {
201
- throw new TypeError(`Locale '${locale}' invalid compact format`);
202
- }
203
- locales.set(locale.toLowerCase(), data.contexts['']);
204
- }
205
-
206
- /**
207
- * Adds a translation to `locale`, replacing any previous translation.
208
- * @param {string} locale Locale name (i.e: `'he'`, `'fr'`).
209
- * @param {string} id Message ID to translate
210
- * @param {string} translation Translation text
211
- */
212
- static addTranslation(locale, id, translation) {
213
- if (typeof locale !== 'string') {
214
- throw new TypeError(`Invalid locale name: ${locale}`);
215
- }
216
- const locale0 = locale.toLowerCase();
217
- const loc = locales.get(locale0);
218
- if (!loc) {
219
- throw new TypeError(`Unknown locale: ${locale}`);
220
- }
221
- if (typeof id !== 'string' || id.length === 0) {
222
- throw new TypeError(`Invalid id: ${id}`);
223
- }
224
- const isArray = Array.isArray(translation);
225
- if (isArray) {
226
- const t0 = translation[0];
227
- if (typeof t0 !== 'string' || t0.length === 0) {
228
- throw new TypeError(`Invalid translation array: ${translation}`);
229
- }
230
- } else if (typeof translation !== 'string') {
231
- throw new TypeError(`Invalid translation: ${translation}`);
232
- }
233
- loc[id] = isArray ? translation : [translation];
234
- }
235
- /**
236
- * Adds multiple translations to `locale`, replacing any previous translations.
237
- * @param {string} locale Locale name (i.e: `'he'`, `'fr'`).
238
- * @param {LocaleData} data parsed data from a `.po` file.
239
- */
240
- static addTranslations(locale, data) {
241
- if (typeof locale !== 'string') {
242
- throw new TypeError(`Invalid locale name: ${locale}`);
243
- }
244
- const locale0 = locale.toLowerCase();
245
- const loc = locales.get(locale0);
246
- if (!loc) {
247
- throw new TypeError(`Unknown locale: ${locale}`);
248
- }
249
- if (typeof data.contexts !== 'object' || typeof data.contexts[''] !== 'object') {
250
- throw new TypeError(`Locale '${locale}' invalid compact format`);
251
- }
252
- const ctx = data.contexts[''];
253
- Object.assign(loc, ctx);
254
- }
255
- /**
256
- * Activates a locale. Throws an error if the locale has not been previously added.
257
- * After setting the locale to be used, all strings marked for translations
258
- * will be represented by the corresponding translation in the specified locale.
259
- * @param {string} locale Locale name (i.e: `'he'`, `'fr'`)
260
- * @return {LocaleData}
261
- */
262
- static useLocale(locale) {
263
- const locale0 = locale.toLowerCase();
264
- const obj = locales.get(locale0);
265
- if (!obj) {
266
- throw new RangeError(`Locale '${locale}' not found`);
267
- }
268
- activeName = alias[locale0] || locale0;
269
- activeLocale = obj;
270
- return activeLocale;
271
- }
272
-
273
- /**
274
- * Returns the name of the active locale (i.e. 'he', 'ashkenazi', 'fr')
275
- * @return {string}
276
- */
277
- static getLocaleName() {
278
- return activeName;
279
- }
280
-
281
- /**
282
- * Returns the names of registered locales
283
- * @return {string[]}
284
- */
285
- static getLocaleNames() {
286
- const keys = Array.from(locales.keys());
287
- return keys.sort((a, b) => a.localeCompare(b));
288
- }
289
-
290
- /**
291
- * @param {number} n
292
- * @param {string} [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale.
293
- * @return {string}
294
- */
295
- static ordinal(n, locale) {
296
- const locale1 = locale === null || locale === void 0 ? void 0 : locale.toLowerCase();
297
- const locale0 = locale1 || activeName;
298
- if (!locale0) {
299
- return this.getEnOrdinal(n);
300
- }
301
- switch (locale0) {
302
- case 'en':
303
- case 's':
304
- case 'a':
305
- case 'ashkenazi':
306
- case 'ashkenazi_litvish':
307
- case 'ashkenazi_poylish':
308
- case 'ashkenazi_standard':
309
- return this.getEnOrdinal(n);
310
- case 'es':
311
- return n + 'º';
312
- case 'h':
313
- case 'he':
314
- case 'he-x-nonikud':
315
- return String(n);
316
- default:
317
- return n + '.';
318
- }
319
- }
320
-
321
- /**
322
- * @private
323
- * @param {number} n
324
- * @return {string}
325
- */
326
- static getEnOrdinal(n) {
327
- const s = ['th', 'st', 'nd', 'rd'];
328
- const v = n % 100;
329
- return n + (s[(v - 20) % 10] || s[v] || s[0]);
330
- }
331
-
332
- /**
333
- * Removes nekudot from Hebrew string
334
- * @param {string} str
335
- * @return {string}
336
- */
337
- static hebrewStripNikkud(str) {
338
- return str.replace(/[\u0590-\u05bd]/g, '').replace(/[\u05bf-\u05c7]/g, '');
339
- }
340
- }
341
- Locale.addLocale('en', noopLocale);
342
- Locale.addLocale('s', noopLocale);
343
- Locale.addLocale('', noopLocale);
344
- Locale.useLocale('en');
345
-
346
4
  /** @private */
347
5
  const lengths = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
348
6
  /** @private */
@@ -519,7 +177,7 @@ const KISLEV$2 = 9;
519
177
  const TEVET$2 = 10;
520
178
  // const SHVAT = 11;
521
179
  const ADAR_I$2 = 12;
522
- const ADAR_II$1 = 13;
180
+ const ADAR_II$2 = 13;
523
181
  /**
524
182
  * Hebrew months of the year (NISAN=1, TISHREI=7)
525
183
  * @readonly
@@ -685,7 +343,7 @@ function daysInMonth(month, year) {
685
343
  case TAMUZ$1:
686
344
  case ELUL$2:
687
345
  case TEVET$2:
688
- case ADAR_II$1:
346
+ case ADAR_II$2:
689
347
  return 29;
690
348
  }
691
349
  if ((month === ADAR_I$2 && !isLeapYear(year)) ||
@@ -907,7 +565,7 @@ const KISLEV$1 = months.KISLEV;
907
565
  const TEVET$1 = months.TEVET;
908
566
  const SHVAT = months.SHVAT;
909
567
  const ADAR_I$1 = months.ADAR_I;
910
- const ADAR_II = months.ADAR_II;
568
+ const ADAR_II$1 = months.ADAR_II;
911
569
  /**
912
570
  * Returns true if the object is a Javascript Date
913
571
  * @private
@@ -953,59 +611,396 @@ function getYahrzeitHD(hyear, date) {
953
611
  // if that was not Kislev 30, use the day before Teveth 1.
954
612
  hDeath = abs2hebrew(hebrew2abs(hyear, TEVET$1, 1) - 1);
955
613
  }
956
- else if (hDeath.mm == ADAR_II) {
614
+ else if (hDeath.mm == ADAR_II$1) {
957
615
  // If it's Adar II, use the same day in last month of year (Adar or Adar II).
958
616
  hDeath.mm = monthsInYear(hyear);
959
617
  }
960
- else if (hDeath.mm == ADAR_I$1 && hDeath.dd == 30 && !isLeapYear(hyear)) {
961
- // If it's the 30th in Adar I and year is not a leap year
962
- // (so Adar has only 29 days), use the last day in Shevat.
963
- hDeath.dd = 30;
964
- hDeath.mm = SHVAT;
618
+ else if (hDeath.mm == ADAR_I$1 && hDeath.dd == 30 && !isLeapYear(hyear)) {
619
+ // If it's the 30th in Adar I and year is not a leap year
620
+ // (so Adar has only 29 days), use the last day in Shevat.
621
+ hDeath.dd = 30;
622
+ hDeath.mm = SHVAT;
623
+ }
624
+ // In all other cases, use the normal anniversary of the date of death.
625
+ // advance day to rosh chodesh if needed
626
+ if (hDeath.mm == CHESHVAN && hDeath.dd == 30 && !longCheshvan(hyear)) {
627
+ hDeath.mm = KISLEV$1;
628
+ hDeath.dd = 1;
629
+ }
630
+ else if (hDeath.mm == KISLEV$1 && hDeath.dd == 30 && shortKislev(hyear)) {
631
+ hDeath.mm = TEVET$1;
632
+ hDeath.dd = 1;
633
+ }
634
+ hDeath.yy = hyear;
635
+ return hDeath;
636
+ }
637
+ function getBirthdayHD(hyear, date) {
638
+ const orig = toSimpleHebrewDate(date);
639
+ const origYear = orig.yy;
640
+ if (hyear === origYear) {
641
+ return orig;
642
+ }
643
+ else if (hyear < origYear) {
644
+ // Hebrew year ${hyear} occurs on or before original date in ${origYear}
645
+ return undefined;
646
+ }
647
+ const isOrigLeap = isLeapYear(origYear);
648
+ let month = orig.mm;
649
+ let day = orig.dd;
650
+ if ((month == ADAR_I$1 && !isOrigLeap) || (month == ADAR_II$1 && isOrigLeap)) {
651
+ month = monthsInYear(hyear);
652
+ }
653
+ else if (month == CHESHVAN && day == 30 && !longCheshvan(hyear)) {
654
+ month = KISLEV$1;
655
+ day = 1;
656
+ }
657
+ else if (month == KISLEV$1 && day == 30 && shortKislev(hyear)) {
658
+ month = TEVET$1;
659
+ day = 1;
660
+ }
661
+ else if (month == ADAR_I$1 && day == 30 && isOrigLeap && !isLeapYear(hyear)) {
662
+ month = NISAN$3;
663
+ day = 1;
664
+ }
665
+ return { yy: hyear, mm: month, dd: day };
666
+ }
667
+
668
+ const GERESH = '׳';
669
+ const GERSHAYIM = '״';
670
+ const alefbet = {
671
+ 'א': 1,
672
+ 'ב': 2,
673
+ 'ג': 3,
674
+ 'ד': 4,
675
+ 'ה': 5,
676
+ 'ו': 6,
677
+ 'ז': 7,
678
+ 'ח': 8,
679
+ 'ט': 9,
680
+ 'י': 10,
681
+ 'כ': 20,
682
+ 'ל': 30,
683
+ 'מ': 40,
684
+ 'נ': 50,
685
+ 'ס': 60,
686
+ 'ע': 70,
687
+ 'פ': 80,
688
+ 'צ': 90,
689
+ 'ק': 100,
690
+ 'ר': 200,
691
+ 'ש': 300,
692
+ 'ת': 400,
693
+ };
694
+ const heb2num = new Map();
695
+ const num2heb = new Map();
696
+ for (const [key, val] of Object.entries(alefbet)) {
697
+ heb2num.set(key, val);
698
+ num2heb.set(val, key);
699
+ }
700
+ function num2digits(num) {
701
+ const digits = [];
702
+ while (num > 0) {
703
+ if (num === 15 || num === 16) {
704
+ digits.push(9);
705
+ digits.push(num - 9);
706
+ break;
707
+ }
708
+ let incr = 100;
709
+ let i;
710
+ for (i = 400; i > num; i -= incr) {
711
+ if (i === incr) {
712
+ incr = incr / 10;
713
+ }
714
+ }
715
+ digits.push(i);
716
+ num -= i;
717
+ }
718
+ return digits;
719
+ }
720
+ /**
721
+ * Converts a numerical value to a string of Hebrew letters.
722
+ *
723
+ * When specifying years of the Hebrew calendar in the present millennium,
724
+ * we omit the thousands (which is presently 5 [ה]).
725
+ * @example
726
+ * gematriya(5774) // 'תשע״ד' - cropped to 774
727
+ * gematriya(25) // 'כ״ה'
728
+ * gematriya(60) // 'ס׳'
729
+ * gematriya(3761) // 'ג׳תשס״א'
730
+ * gematriya(1123) // 'א׳קכ״ג'
731
+ * @param {number} num
732
+ * @return {string}
733
+ */
734
+ function gematriya(num) {
735
+ const num0 = num;
736
+ const num1 = parseInt(num0, 10);
737
+ if (!num1) {
738
+ throw new TypeError(`invalid parameter to gematriya ${num}`);
739
+ }
740
+ let str = '';
741
+ const thousands = Math.floor(num1 / 1000);
742
+ if (thousands > 0 && thousands !== 5) {
743
+ const tdigits = num2digits(thousands);
744
+ for (const tdig of tdigits) {
745
+ str += num2heb.get(tdig);
746
+ }
747
+ str += GERESH;
748
+ }
749
+ const digits = num2digits(num1 % 1000);
750
+ if (digits.length == 1) {
751
+ return str + num2heb.get(digits[0]) + GERESH;
752
+ }
753
+ for (let i = 0; i < digits.length; i++) {
754
+ if (i + 1 === digits.length) {
755
+ str += GERSHAYIM;
756
+ }
757
+ str += num2heb.get(digits[i]);
758
+ }
759
+ return str;
760
+ }
761
+ /**
762
+ * Converts a string of Hebrew letters to a numerical value.
763
+ *
764
+ * Only considers the value of Hebrew letters `א` through `ת`.
765
+ * Ignores final Hebrew letters such as `ך` (kaf sofit) or `ם` (mem sofit)
766
+ * and vowels (nekudot).
767
+ *
768
+ * @param {string} str
769
+ * @return {number}
770
+ */
771
+ function gematriyaStrToNum(str) {
772
+ let num = 0;
773
+ const gereshIdx = str.indexOf(GERESH);
774
+ if (gereshIdx !== -1 && gereshIdx !== str.length - 1) {
775
+ const thousands = str.substring(0, gereshIdx);
776
+ num += gematriyaStrToNum(thousands) * 1000;
777
+ str = str.substring(gereshIdx);
778
+ }
779
+ for (const ch of str) {
780
+ const n = heb2num.get(ch);
781
+ if (typeof n === 'number') {
782
+ num += n;
783
+ }
784
+ }
785
+ return num;
786
+ }
787
+
788
+ const noopLocale = {
789
+ headers: {
790
+ 'plural-forms': 'nplurals=2; plural=(n!=1);'
791
+ },
792
+ contexts: {
793
+ '': {}
794
+ }
795
+ };
796
+ const alias = {
797
+ 'h': 'he',
798
+ 'a': 'ashkenazi',
799
+ 's': 'en',
800
+ '': 'en'
801
+ };
802
+
803
+ /** @private */
804
+ const locales = new Map();
805
+ /** @private */
806
+ let activeLocale = null;
807
+ /** @private */
808
+ let activeName = null;
809
+
810
+ /**
811
+ * A locale in Hebcal is used for translations/transliterations of
812
+ * holidays. `@hebcal/core` supports four locales by default
813
+ * * `en` - default, Sephardic transliterations (e.g. "Shabbat")
814
+ * * `ashkenazi` - Ashkenazi transliterations (e.g. "Shabbos")
815
+ * * `he` - Hebrew (e.g. "שַׁבָּת")
816
+ * * `he-x-NoNikud` - Hebrew without nikud (e.g. "שבת")
817
+ */
818
+ class Locale {
819
+ /**
820
+ * Returns translation only if `locale` offers a non-empty translation for `id`.
821
+ * Otherwise, returns `undefined`.
822
+ * @param {string} id Message ID to translate
823
+ * @param {string} [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale.
824
+ * @return {string}
825
+ */
826
+ static lookupTranslation(id, locale) {
827
+ const locale0 = locale === null || locale === void 0 ? void 0 : locale.toLowerCase();
828
+ const loc = typeof locale == 'string' && locales.get(locale0) || activeLocale;
829
+ const array = loc[id];
830
+ if (array !== null && array !== void 0 && array.length && array[0].length) {
831
+ return array[0];
832
+ }
833
+ return undefined;
834
+ }
835
+
836
+ /**
837
+ * By default, if no translation was found, returns `id`.
838
+ * @param {string} id Message ID to translate
839
+ * @param {string} [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale.
840
+ * @return {string}
841
+ */
842
+ static gettext(id, locale) {
843
+ const text = this.lookupTranslation(id, locale);
844
+ if (typeof text == 'undefined') {
845
+ return id;
846
+ }
847
+ return text;
848
+ }
849
+
850
+ /**
851
+ * Register locale translations.
852
+ * @param {string} locale Locale name (i.e.: `'he'`, `'fr'`)
853
+ * @param {LocaleData} data parsed data from a `.po` file.
854
+ */
855
+ static addLocale(locale, data) {
856
+ if (typeof locale !== 'string') {
857
+ throw new TypeError(`Invalid locale name: ${locale}`);
858
+ }
859
+ if (typeof data.contexts !== 'object' || typeof data.contexts[''] !== 'object') {
860
+ throw new TypeError(`Locale '${locale}' invalid compact format`);
861
+ }
862
+ locales.set(locale.toLowerCase(), data.contexts['']);
863
+ }
864
+
865
+ /**
866
+ * Adds a translation to `locale`, replacing any previous translation.
867
+ * @param {string} locale Locale name (i.e: `'he'`, `'fr'`).
868
+ * @param {string} id Message ID to translate
869
+ * @param {string} translation Translation text
870
+ */
871
+ static addTranslation(locale, id, translation) {
872
+ if (typeof locale !== 'string') {
873
+ throw new TypeError(`Invalid locale name: ${locale}`);
874
+ }
875
+ const locale0 = locale.toLowerCase();
876
+ const loc = locales.get(locale0);
877
+ if (!loc) {
878
+ throw new TypeError(`Unknown locale: ${locale}`);
965
879
  }
966
- // In all other cases, use the normal anniversary of the date of death.
967
- // advance day to rosh chodesh if needed
968
- if (hDeath.mm == CHESHVAN && hDeath.dd == 30 && !longCheshvan(hyear)) {
969
- hDeath.mm = KISLEV$1;
970
- hDeath.dd = 1;
880
+ if (typeof id !== 'string' || id.length === 0) {
881
+ throw new TypeError(`Invalid id: ${id}`);
971
882
  }
972
- else if (hDeath.mm == KISLEV$1 && hDeath.dd == 30 && shortKislev(hyear)) {
973
- hDeath.mm = TEVET$1;
974
- hDeath.dd = 1;
883
+ const isArray = Array.isArray(translation);
884
+ if (isArray) {
885
+ const t0 = translation[0];
886
+ if (typeof t0 !== 'string' || t0.length === 0) {
887
+ throw new TypeError(`Invalid translation array: ${translation}`);
888
+ }
889
+ } else if (typeof translation !== 'string') {
890
+ throw new TypeError(`Invalid translation: ${translation}`);
975
891
  }
976
- hDeath.yy = hyear;
977
- return hDeath;
978
- }
979
- function getBirthdayHD(hyear, date) {
980
- const orig = toSimpleHebrewDate(date);
981
- const origYear = orig.yy;
982
- if (hyear === origYear) {
983
- return orig;
892
+ loc[id] = isArray ? translation : [translation];
893
+ }
894
+ /**
895
+ * Adds multiple translations to `locale`, replacing any previous translations.
896
+ * @param {string} locale Locale name (i.e: `'he'`, `'fr'`).
897
+ * @param {LocaleData} data parsed data from a `.po` file.
898
+ */
899
+ static addTranslations(locale, data) {
900
+ if (typeof locale !== 'string') {
901
+ throw new TypeError(`Invalid locale name: ${locale}`);
984
902
  }
985
- else if (hyear < origYear) {
986
- // Hebrew year ${hyear} occurs on or before original date in ${origYear}
987
- return undefined;
903
+ const locale0 = locale.toLowerCase();
904
+ const loc = locales.get(locale0);
905
+ if (!loc) {
906
+ throw new TypeError(`Unknown locale: ${locale}`);
988
907
  }
989
- const isOrigLeap = isLeapYear(origYear);
990
- let month = orig.mm;
991
- let day = orig.dd;
992
- if ((month == ADAR_I$1 && !isOrigLeap) || (month == ADAR_II && isOrigLeap)) {
993
- month = monthsInYear(hyear);
908
+ if (typeof data.contexts !== 'object' || typeof data.contexts[''] !== 'object') {
909
+ throw new TypeError(`Locale '${locale}' invalid compact format`);
994
910
  }
995
- else if (month == CHESHVAN && day == 30 && !longCheshvan(hyear)) {
996
- month = KISLEV$1;
997
- day = 1;
911
+ const ctx = data.contexts[''];
912
+ Object.assign(loc, ctx);
913
+ }
914
+ /**
915
+ * Activates a locale. Throws an error if the locale has not been previously added.
916
+ * After setting the locale to be used, all strings marked for translations
917
+ * will be represented by the corresponding translation in the specified locale.
918
+ * @param {string} locale Locale name (i.e: `'he'`, `'fr'`)
919
+ * @return {LocaleData}
920
+ */
921
+ static useLocale(locale) {
922
+ const locale0 = locale.toLowerCase();
923
+ const obj = locales.get(locale0);
924
+ if (!obj) {
925
+ throw new RangeError(`Locale '${locale}' not found`);
998
926
  }
999
- else if (month == KISLEV$1 && day == 30 && shortKislev(hyear)) {
1000
- month = TEVET$1;
1001
- day = 1;
927
+ activeName = alias[locale0] || locale0;
928
+ activeLocale = obj;
929
+ return activeLocale;
930
+ }
931
+
932
+ /**
933
+ * Returns the name of the active locale (i.e. 'he', 'ashkenazi', 'fr')
934
+ * @return {string}
935
+ */
936
+ static getLocaleName() {
937
+ return activeName;
938
+ }
939
+
940
+ /**
941
+ * Returns the names of registered locales
942
+ * @return {string[]}
943
+ */
944
+ static getLocaleNames() {
945
+ const keys = Array.from(locales.keys());
946
+ return keys.sort((a, b) => a.localeCompare(b));
947
+ }
948
+
949
+ /**
950
+ * @param {number} n
951
+ * @param {string} [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale.
952
+ * @return {string}
953
+ */
954
+ static ordinal(n, locale) {
955
+ const locale1 = locale === null || locale === void 0 ? void 0 : locale.toLowerCase();
956
+ const locale0 = locale1 || activeName;
957
+ if (!locale0) {
958
+ return this.getEnOrdinal(n);
1002
959
  }
1003
- else if (month == ADAR_I$1 && day == 30 && isOrigLeap && !isLeapYear(hyear)) {
1004
- month = NISAN$3;
1005
- day = 1;
960
+ switch (locale0) {
961
+ case 'en':
962
+ case 's':
963
+ case 'a':
964
+ case 'ashkenazi':
965
+ case 'ashkenazi_litvish':
966
+ case 'ashkenazi_poylish':
967
+ case 'ashkenazi_standard':
968
+ return this.getEnOrdinal(n);
969
+ case 'es':
970
+ return n + 'º';
971
+ case 'h':
972
+ case 'he':
973
+ case 'he-x-nonikud':
974
+ return String(n);
975
+ default:
976
+ return n + '.';
1006
977
  }
1007
- return { yy: hyear, mm: month, dd: day };
978
+ }
979
+
980
+ /**
981
+ * @private
982
+ * @param {number} n
983
+ * @return {string}
984
+ */
985
+ static getEnOrdinal(n) {
986
+ const s = ['th', 'st', 'nd', 'rd'];
987
+ const v = n % 100;
988
+ return n + (s[(v - 20) % 10] || s[v] || s[0]);
989
+ }
990
+
991
+ /**
992
+ * Removes nekudot from Hebrew string
993
+ * @param {string} str
994
+ * @return {string}
995
+ */
996
+ static hebrewStripNikkud(str) {
997
+ return str.replace(/[\u0590-\u05bd]/g, '').replace(/[\u05bf-\u05c7]/g, '');
998
+ }
1008
999
  }
1000
+ Locale.addLocale('en', noopLocale);
1001
+ Locale.addLocale('s', noopLocale);
1002
+ Locale.addLocale('', noopLocale);
1003
+ Locale.useLocale('en');
1009
1004
 
1010
1005
  /**
1011
1006
  * @private
@@ -1999,15 +1994,24 @@ class HebrewDateEvent extends Event {
1999
1994
  switch (locale0) {
2000
1995
  case 'h':
2001
1996
  case 'he':
1997
+ return hd.renderGematriya(false);
2002
1998
  case 'he-x-nonikud':
2003
- const dd = hd.getDate();
2004
- const mm = Locale.gettext(hd.getMonthName(), locale0);
2005
- const yy = hd.getFullYear();
2006
- return gematriya(dd) + ' ' + mm + ' ' + gematriya(yy);
1999
+ return hd.renderGematriya(true);
2007
2000
  default:
2008
2001
  return hd.render(locale0, true);
2009
2002
  }
2010
2003
  }
2004
+ /**
2005
+ * @private
2006
+ * @param {string} locale
2007
+ * @return {string}
2008
+ */
2009
+ renderBriefHebrew(locale) {
2010
+ const hd = this.getDate();
2011
+ const dd = hd.getDate();
2012
+ const mm = Locale.gettext(hd.getMonthName(), locale);
2013
+ return gematriya(dd) + ' ' + mm;
2014
+ }
2011
2015
  /**
2012
2016
  * @param {string} [locale] Optional locale name (defaults to active locale).
2013
2017
  * @example
@@ -2030,9 +2034,7 @@ class HebrewDateEvent extends Event {
2030
2034
  case 'h':
2031
2035
  case 'he':
2032
2036
  case 'he-x-nonikud':
2033
- const dd = hd.getDate();
2034
- const mm = Locale.gettext(hd.getMonthName(), locale0);
2035
- return gematriya(dd) + ' ' + mm;
2037
+ return this.renderBriefHebrew(locale0);
2036
2038
  default:
2037
2039
  return hd.render(locale0, false);
2038
2040
  }
@@ -3898,10 +3900,8 @@ class Zmanim {
3898
3900
  }
3899
3901
 
3900
3902
  /* eslint-disable max-len */
3901
- const days = {
3902
- FRI: 5,
3903
- SAT: 6
3904
- };
3903
+ const FRI$3 = 5;
3904
+ const SAT$3 = 6;
3905
3905
 
3906
3906
  /**
3907
3907
  * @private
@@ -3914,11 +3914,11 @@ const days = {
3914
3914
  */
3915
3915
  function makeCandleEvent(e, hd, dow, location, options) {
3916
3916
  let havdalahTitle = false;
3917
- let useHavdalahOffset = dow == days.SAT;
3917
+ let useHavdalahOffset = dow === SAT$3;
3918
3918
  let mask = e ? e.getFlags() : flags.LIGHT_CANDLES;
3919
3919
  if (typeof e !== 'undefined') {
3920
3920
  // if linked event && dow == FRI, use Candle lighting time & title
3921
- if (dow != days.FRI) {
3921
+ if (dow !== FRI$3) {
3922
3922
  if (mask & (flags.LIGHT_CANDLES_TZEIS | flags.CHANUKAH_CANDLES)) {
3923
3923
  useHavdalahOffset = true;
3924
3924
  } else if (mask & flags.YOM_TOV_ENDS) {
@@ -3926,7 +3926,7 @@ function makeCandleEvent(e, hd, dow, location, options) {
3926
3926
  useHavdalahOffset = true;
3927
3927
  }
3928
3928
  }
3929
- } else if (dow == days.SAT) {
3929
+ } else if (dow === SAT$3) {
3930
3930
  havdalahTitle = true;
3931
3931
  mask = flags.LIGHT_CANDLES_TZEIS;
3932
3932
  }
@@ -4273,24 +4273,40 @@ class OmerEvent extends Event {
4273
4273
  * @return {string}
4274
4274
  */
4275
4275
  sefira(lang = 'en') {
4276
- const week = sefirot[this.weekNumber];
4277
- const dayWithinWeek = sefirot[this.daysWithinWeeks];
4278
- switch (lang) {
4279
- case 'he':
4280
- const heWeek = Locale.gettext(week, 'he');
4281
- const heDayWithinWeek = Locale.gettext(dayWithinWeek, 'he');
4282
- const hePrefix = this.weekNumber === 2 || this.weekNumber === 6 ? 'שֶׁבִּ' : 'שֶׁבְּ';
4283
- return `${heDayWithinWeek} ${hePrefix}${heWeek}`.normalize();
4284
- case 'translit':
4285
- const translitWeek = sefirotTranslit[this.weekNumber];
4286
- const translitDayWithinWeek = sefirotTranslit[this.daysWithinWeeks];
4287
- const translitPrefix = this.weekNumber === 2 || this.weekNumber === 6 ? 'shebi' : `sheb'`;
4288
- return `${translitDayWithinWeek} ${translitPrefix}${translitWeek}`;
4289
- case 'en':
4290
- default:
4291
- return `${dayWithinWeek} within ${week}`;
4276
+ if (lang === 'he') {
4277
+ return this.sefiraHe();
4278
+ } else if (lang === 'translit') {
4279
+ return this.sefiraTranslit();
4280
+ } else {
4281
+ const week = sefirot[this.weekNumber];
4282
+ const dayWithinWeek = sefirot[this.daysWithinWeeks];
4283
+ return `${dayWithinWeek} within ${week}`;
4292
4284
  }
4293
4285
  }
4286
+ /**
4287
+ * @private
4288
+ * @return {string}
4289
+ */
4290
+ sefiraTranslit() {
4291
+ const weekNum = this.weekNumber;
4292
+ const translitWeek = sefirotTranslit[weekNum];
4293
+ const translitDayWithinWeek = sefirotTranslit[this.daysWithinWeeks];
4294
+ const translitPrefix = weekNum === 2 || weekNum === 6 ? 'shebi' : `sheb'`;
4295
+ return `${translitDayWithinWeek} ${translitPrefix}${translitWeek}`;
4296
+ }
4297
+ /**
4298
+ * @private
4299
+ * @return {string}
4300
+ */
4301
+ sefiraHe() {
4302
+ const weekNum = this.weekNumber;
4303
+ const week = sefirot[weekNum];
4304
+ const dayWithinWeek = sefirot[this.daysWithinWeeks];
4305
+ const heWeek = Locale.gettext(week, 'he');
4306
+ const heDayWithinWeek = Locale.gettext(dayWithinWeek, 'he');
4307
+ const hePrefix = weekNum === 2 || weekNum === 6 ? 'שֶׁבִּ' : 'שֶׁבְּ';
4308
+ return `${heDayWithinWeek} ${hePrefix}${heWeek}`.normalize();
4309
+ }
4294
4310
  /**
4295
4311
  * @todo use gettext()
4296
4312
  * @param {string} [locale] Optional locale name (defaults to active locale).
@@ -4954,18 +4970,15 @@ const Elul = months.ELUL;
4954
4970
  const Tishrei = months.TISHREI;
4955
4971
  const Cheshvan = months.CHESHVAN;
4956
4972
  const Kislev = months.KISLEV;
4957
- // const Tevet = months.TEVET;
4958
4973
  const Shvat = months.SHVAT;
4959
- // const Adar1 = months.ADAR_I;
4960
4974
  const Adar2 = months.ADAR_II;
4961
4975
  const CHAG$1 = flags.CHAG;
4962
4976
  const LIGHT_CANDLES$1 = flags.LIGHT_CANDLES;
4963
4977
  const YOM_TOV_ENDS$1 = flags.YOM_TOV_ENDS;
4964
4978
  const CHUL_ONLY$1 = flags.CHUL_ONLY;
4965
- const IL_ONLY$1 = flags.IL_ONLY;
4979
+ const IL_ONLY$2 = flags.IL_ONLY;
4966
4980
  const LIGHT_CANDLES_TZEIS$2 = flags.LIGHT_CANDLES_TZEIS;
4967
4981
  const CHANUKAH_CANDLES$2 = flags.CHANUKAH_CANDLES;
4968
- // const MINOR_FAST = flags.MINOR_FAST;
4969
4982
  const MAJOR_FAST$2 = flags.MAJOR_FAST;
4970
4983
  const MINOR_HOLIDAY$2 = flags.MINOR_HOLIDAY;
4971
4984
  const EREV$2 = flags.EREV;
@@ -5048,54 +5061,54 @@ const staticHolidays = [{
5048
5061
  mm: Tishrei,
5049
5062
  dd: 14,
5050
5063
  desc: 'Erev Sukkot',
5051
- flags: IL_ONLY$1 | EREV$2 | LIGHT_CANDLES$1,
5064
+ flags: IL_ONLY$2 | EREV$2 | LIGHT_CANDLES$1,
5052
5065
  emoji: emojiSukkot
5053
5066
  }, {
5054
5067
  mm: Tishrei,
5055
5068
  dd: 15,
5056
5069
  desc: 'Sukkot I',
5057
- flags: IL_ONLY$1 | CHAG$1 | YOM_TOV_ENDS$1,
5070
+ flags: IL_ONLY$2 | CHAG$1 | YOM_TOV_ENDS$1,
5058
5071
  emoji: emojiSukkot
5059
5072
  }, {
5060
5073
  mm: Tishrei,
5061
5074
  dd: 16,
5062
5075
  desc: 'Sukkot II (CH\'\'M)',
5063
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5076
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5064
5077
  chmDay: 1,
5065
5078
  emoji: emojiSukkot
5066
5079
  }, {
5067
5080
  mm: Tishrei,
5068
5081
  dd: 17,
5069
5082
  desc: 'Sukkot III (CH\'\'M)',
5070
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5083
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5071
5084
  chmDay: 2,
5072
5085
  emoji: emojiSukkot
5073
5086
  }, {
5074
5087
  mm: Tishrei,
5075
5088
  dd: 18,
5076
5089
  desc: 'Sukkot IV (CH\'\'M)',
5077
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5090
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5078
5091
  chmDay: 3,
5079
5092
  emoji: emojiSukkot
5080
5093
  }, {
5081
5094
  mm: Tishrei,
5082
5095
  dd: 19,
5083
5096
  desc: 'Sukkot V (CH\'\'M)',
5084
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5097
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5085
5098
  chmDay: 4,
5086
5099
  emoji: emojiSukkot
5087
5100
  }, {
5088
5101
  mm: Tishrei,
5089
5102
  dd: 20,
5090
5103
  desc: 'Sukkot VI (CH\'\'M)',
5091
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5104
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5092
5105
  chmDay: 5,
5093
5106
  emoji: emojiSukkot
5094
5107
  }, {
5095
5108
  mm: Tishrei,
5096
5109
  dd: 22,
5097
5110
  desc: 'Shmini Atzeret',
5098
- flags: IL_ONLY$1 | CHAG$1 | YOM_TOV_ENDS$1
5111
+ flags: IL_ONLY$2 | CHAG$1 | YOM_TOV_ENDS$1
5099
5112
  }, {
5100
5113
  mm: Tishrei,
5101
5114
  dd: 21,
@@ -5139,54 +5152,54 @@ const staticHolidays = [{
5139
5152
  mm: Nisan,
5140
5153
  dd: 14,
5141
5154
  desc: 'Erev Pesach',
5142
- flags: IL_ONLY$1 | EREV$2 | LIGHT_CANDLES$1,
5155
+ flags: IL_ONLY$2 | EREV$2 | LIGHT_CANDLES$1,
5143
5156
  emoji: '🫓🍷'
5144
5157
  }, {
5145
5158
  mm: Nisan,
5146
5159
  dd: 15,
5147
5160
  desc: 'Pesach I',
5148
- flags: IL_ONLY$1 | CHAG$1 | YOM_TOV_ENDS$1,
5161
+ flags: IL_ONLY$2 | CHAG$1 | YOM_TOV_ENDS$1,
5149
5162
  emoji: emojiPesach
5150
5163
  }, {
5151
5164
  mm: Nisan,
5152
5165
  dd: 16,
5153
5166
  desc: 'Pesach II (CH\'\'M)',
5154
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5167
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5155
5168
  chmDay: 1,
5156
5169
  emoji: emojiPesach
5157
5170
  }, {
5158
5171
  mm: Nisan,
5159
5172
  dd: 17,
5160
5173
  desc: 'Pesach III (CH\'\'M)',
5161
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5174
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5162
5175
  chmDay: 2,
5163
5176
  emoji: emojiPesach
5164
5177
  }, {
5165
5178
  mm: Nisan,
5166
5179
  dd: 18,
5167
5180
  desc: 'Pesach IV (CH\'\'M)',
5168
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5181
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5169
5182
  chmDay: 3,
5170
5183
  emoji: emojiPesach
5171
5184
  }, {
5172
5185
  mm: Nisan,
5173
5186
  dd: 19,
5174
5187
  desc: 'Pesach V (CH\'\'M)',
5175
- flags: IL_ONLY$1 | CHOL_HAMOED$1,
5188
+ flags: IL_ONLY$2 | CHOL_HAMOED$1,
5176
5189
  chmDay: 4,
5177
5190
  emoji: emojiPesach
5178
5191
  }, {
5179
5192
  mm: Nisan,
5180
5193
  dd: 20,
5181
5194
  desc: 'Pesach VI (CH\'\'M)',
5182
- flags: IL_ONLY$1 | CHOL_HAMOED$1 | LIGHT_CANDLES$1,
5195
+ flags: IL_ONLY$2 | CHOL_HAMOED$1 | LIGHT_CANDLES$1,
5183
5196
  chmDay: 5,
5184
5197
  emoji: emojiPesach
5185
5198
  }, {
5186
5199
  mm: Nisan,
5187
5200
  dd: 21,
5188
5201
  desc: 'Pesach VII',
5189
- flags: IL_ONLY$1 | CHAG$1 | YOM_TOV_ENDS$1,
5202
+ flags: IL_ONLY$2 | CHAG$1 | YOM_TOV_ENDS$1,
5190
5203
  emoji: emojiPesach
5191
5204
  },
5192
5205
  // Pesach chutz l'aretz
@@ -5269,7 +5282,7 @@ const staticHolidays = [{
5269
5282
  mm: Sivan,
5270
5283
  dd: 6,
5271
5284
  desc: 'Shavuot',
5272
- flags: IL_ONLY$1 | CHAG$1 | YOM_TOV_ENDS$1,
5285
+ flags: IL_ONLY$2 | CHAG$1 | YOM_TOV_ENDS$1,
5273
5286
  emoji: '⛰️🌸'
5274
5287
  }, {
5275
5288
  mm: Sivan,
@@ -5378,6 +5391,16 @@ const staticModernHolidays = [{
5378
5391
  You should have received a copy of the GNU General Public License
5379
5392
  along with this program. If not, see <http://www.gnu.org/licenses/>.
5380
5393
  */
5394
+ const CHAG = flags.CHAG;
5395
+ const IL_ONLY$1 = flags.IL_ONLY;
5396
+ const LIGHT_CANDLES_TZEIS$1 = flags.LIGHT_CANDLES_TZEIS;
5397
+ const CHANUKAH_CANDLES$1 = flags.CHANUKAH_CANDLES;
5398
+ const MINOR_FAST$1 = flags.MINOR_FAST;
5399
+ const SPECIAL_SHABBAT$1 = flags.SPECIAL_SHABBAT;
5400
+ const MODERN_HOLIDAY$1 = flags.MODERN_HOLIDAY;
5401
+ const MAJOR_FAST$1 = flags.MAJOR_FAST;
5402
+ const MINOR_HOLIDAY$1 = flags.MINOR_HOLIDAY;
5403
+ const EREV$1 = flags.EREV;
5381
5404
 
5382
5405
  /** Represents a built-in holiday like Pesach, Purim or Tu BiShvat */
5383
5406
  class HolidayEvent extends Event {
@@ -5392,7 +5415,7 @@ class HolidayEvent extends Event {
5392
5415
  return undefined;
5393
5416
  }
5394
5417
  const url = 'https://www.hebcal.com/holidays/' + this.basename().toLowerCase().replace(/'/g, '').replace(/ /g, '-') + '-' + this.urlDateSuffix();
5395
- return this.getFlags() & flags.IL_ONLY ? url + '?i=on' : url;
5418
+ return this.getFlags() & IL_ONLY$1 ? url + '?i=on' : url;
5396
5419
  }
5397
5420
  /** @return {string} */
5398
5421
  urlDateSuffix() {
@@ -5403,7 +5426,7 @@ class HolidayEvent extends Event {
5403
5426
  getEmoji() {
5404
5427
  if (this.emoji) {
5405
5428
  return this.emoji;
5406
- } else if (this.getFlags() & flags.SPECIAL_SHABBAT) {
5429
+ } else if (this.getFlags() & SPECIAL_SHABBAT$1) {
5407
5430
  return '🕍';
5408
5431
  } else {
5409
5432
  return '✡️';
@@ -5493,7 +5516,7 @@ class MevarchimChodeshEvent extends Event {
5493
5516
  this.monthName = monthName;
5494
5517
  const hyear = date.getFullYear();
5495
5518
  const hmonth = date.getMonth();
5496
- const monNext = hmonth == HDate.monthsInYear(hyear) ? months.NISAN : hmonth + 1;
5519
+ const monNext = hmonth == HDate.monthsInYear(hyear) ? NISAN$1 : hmonth + 1;
5497
5520
  const molad = new MoladEvent(date, hyear, monNext);
5498
5521
  this.memo = molad.render('en');
5499
5522
  }
@@ -5574,41 +5597,19 @@ class YomKippurKatanEvent extends HolidayEvent {
5574
5597
  }
5575
5598
  }
5576
5599
  const SUN = 0;
5577
- // const MON = 1;
5578
5600
  const TUE = 2;
5579
- // const WED = 3;
5580
5601
  const THU = 4;
5581
5602
  const FRI$1 = 5;
5582
5603
  const SAT$1 = 6;
5583
5604
  const NISAN$1 = months.NISAN;
5584
- // const IYYAR = months.IYYAR;
5585
- // const SIVAN = months.SIVAN;
5586
5605
  const TAMUZ = months.TAMUZ;
5587
5606
  const AV = months.AV;
5588
5607
  const ELUL$1 = months.ELUL;
5589
5608
  const TISHREI$1 = months.TISHREI;
5590
- // const CHESHVAN = months.CHESHVAN;
5591
5609
  const KISLEV = months.KISLEV;
5592
5610
  const TEVET = months.TEVET;
5593
- // const SHVAT = months.SHVAT;
5594
5611
  const ADAR_I = months.ADAR_I;
5595
- // const ADAR_II = months.ADAR_II;
5596
-
5597
- const CHAG = flags.CHAG;
5598
- // const LIGHT_CANDLES = flags.LIGHT_CANDLES;
5599
- // const YOM_TOV_ENDS = flags.YOM_TOV_ENDS;
5600
- // const CHUL_ONLY = flags.CHUL_ONLY;
5601
- // const IL_ONLY = flags.IL_ONLY;
5602
- const LIGHT_CANDLES_TZEIS$1 = flags.LIGHT_CANDLES_TZEIS;
5603
- const CHANUKAH_CANDLES$1 = flags.CHANUKAH_CANDLES;
5604
- const MINOR_FAST$1 = flags.MINOR_FAST;
5605
- const SPECIAL_SHABBAT$1 = flags.SPECIAL_SHABBAT;
5606
- const MODERN_HOLIDAY$1 = flags.MODERN_HOLIDAY;
5607
- const MAJOR_FAST$1 = flags.MAJOR_FAST;
5608
- const MINOR_HOLIDAY$1 = flags.MINOR_HOLIDAY;
5609
- const EREV$1 = flags.EREV;
5610
- // const CHOL_HAMOED = flags.CHOL_HAMOED;
5611
-
5612
+ const ADAR_II = months.ADAR_II;
5612
5613
  const sedraCache = new Map();
5613
5614
 
5614
5615
  /**
@@ -5660,7 +5661,7 @@ function getHolidaysForYear_(year) {
5660
5661
  const key = ev.date.toString();
5661
5662
  const arr = map.get(key);
5662
5663
  if (typeof arr === 'object') {
5663
- if (arr[0].getFlags() & flags.EREV) {
5664
+ if (arr[0].getFlags() & EREV$1) {
5664
5665
  arr.unshift(ev);
5665
5666
  } else {
5666
5667
  arr.push(ev);
@@ -5710,7 +5711,7 @@ function getHolidaysForYear_(year) {
5710
5711
  emoji: '🕍'
5711
5712
  }));
5712
5713
  if (pesach.getDay() == SUN) {
5713
- add(new HolidayEvent(new HDate(16, months.ADAR_II, year), 'Purim Meshulash', MINOR_HOLIDAY$1));
5714
+ add(new HolidayEvent(new HDate(16, ADAR_II, year), 'Purim Meshulash', MINOR_HOLIDAY$1));
5714
5715
  }
5715
5716
  if (HDate.isLeapYear(year)) {
5716
5717
  add(new HolidayEvent(new HDate(14, ADAR_I, year), 'Purim Katan', MINOR_HOLIDAY$1, {
@@ -5739,7 +5740,7 @@ function getHolidaysForYear_(year) {
5739
5740
  } else if (h.satPostponeToSun && dow === SAT$1) {
5740
5741
  hd = hd.next();
5741
5742
  }
5742
- const mask = h.chul ? MODERN_HOLIDAY$1 : MODERN_HOLIDAY$1 | flags.IL_ONLY;
5743
+ const mask = h.chul ? MODERN_HOLIDAY$1 : MODERN_HOLIDAY$1 | IL_ONLY$1;
5743
5744
  const ev = new HolidayEvent(hd, h.desc, mask);
5744
5745
  if (!h.suppressEmoji) {
5745
5746
  ev.emoji = '🇮🇱';
@@ -5793,7 +5794,7 @@ function getHolidaysForYear_(year) {
5793
5794
  // Yom Kippur Katan is not observed on the day before Rosh Hashanah.
5794
5795
  // Not observed prior to Rosh Chodesh Cheshvan because Yom Kippur has just passed.
5795
5796
  // Not observed before Rosh Chodesh Tevet, because that day is Hanukkah.
5796
- if (nextMonth === months.TISHREI || nextMonth === months.CHESHVAN || nextMonth === months.TEVET) {
5797
+ if (nextMonth === TISHREI$1 || nextMonth === months.CHESHVAN || nextMonth === TEVET) {
5797
5798
  continue;
5798
5799
  }
5799
5800
  let ykk = new HDate(29, month, year);
@@ -5835,7 +5836,7 @@ function getHolidaysForYear_(year) {
5835
5836
  */
5836
5837
  function getBirkatHaChama(year) {
5837
5838
  const leap = HDate.isLeapYear(year);
5838
- const startMonth = leap ? months.ADAR_II : NISAN$1;
5839
+ const startMonth = leap ? ADAR_II : NISAN$1;
5839
5840
  const startDay = leap ? 20 : 1;
5840
5841
  const baseRd = HDate.hebrew2abs(year, startMonth, startDay);
5841
5842
  for (let day = 0; day <= 40; day++) {
@@ -5885,29 +5886,8 @@ class DailyLearning {
5885
5886
  }
5886
5887
  }
5887
5888
 
5888
- const version="5.0.1";
5889
-
5890
- const headers$1={"plural-forms":"nplurals=2; plural=(n > 1);"};const contexts$1={"":{Shabbat:["Shabbos"],"Achrei Mot":["Achrei Mos"],Bechukotai:["Bechukosai"],"Beha'alotcha":["Beha'aloscha"],Bereshit:["Bereshis"],Chukat:["Chukas"],"Erev Shavuot":["Erev Shavuos"],"Erev Sukkot":["Erev Sukkos"],"Ki Tavo":["Ki Savo"],"Ki Teitzei":["Ki Seitzei"],"Ki Tisa":["Ki Sisa"],Matot:["Matos"],"Purim Katan":["Purim Koton"],"Shabbat Chazon":["Shabbos Chazon"],"Shabbat HaChodesh":["Shabbos HaChodesh"],"Shabbat HaGadol":["Shabbos HaGadol"],"Shabbat Nachamu":["Shabbos Nachamu"],"Shabbat Parah":["Shabbos Parah"],"Shabbat Shekalim":["Shabbos Shekalim"],"Shabbat Shuva":["Shabbos Shuvah"],"Shabbat Zachor":["Shabbos Zachor"],Shavuot:["Shavuos"],"Shavuot I":["Shavuos I"],"Shavuot II":["Shavuos II"],Shemot:["Shemos"],"Shmini Atzeret":["Shmini Atzeres"],"Simchat Torah":["Simchas Torah"],Sukkot:["Sukkos"],"Sukkot I":["Sukkos I"],"Sukkot II":["Sukkos II"],"Sukkot II (CH''M)":["Sukkos II (CH''M)"],"Sukkot III (CH''M)":["Sukkos III (CH''M)"],"Sukkot IV (CH''M)":["Sukkos IV (CH''M)"],"Sukkot V (CH''M)":["Sukkos V (CH''M)"],"Sukkot VI (CH''M)":["Sukkos VI (CH''M)"],"Sukkot VII (Hoshana Raba)":["Sukkos VII (Hoshana Raba)"],"Ta'anit Bechorot":["Ta'anis Bechoros"],"Ta'anit Esther":["Ta'anis Esther"],Toldot:["Toldos"],Vaetchanan:["Vaeschanan"],Yitro:["Yisro"],"Vezot Haberakhah":["Vezos Haberakhah"],Parashat:["Parshas"],"Leil Selichot":["Leil Selichos"],"Shabbat Mevarchim Chodesh":["Shabbos Mevorchim Chodesh"],"Shabbat Shirah":["Shabbos Shirah"],Tevet:["Teves"],"Asara B'Tevet":["Asara B'Teves"],"Alot HaShachar":["Alos HaShachar"],"Kriat Shema, sof zeman":["Krias Shema, sof zman"],"Tefilah, sof zeman":["Tefilah, sof zman"],"Kriat Shema, sof zeman (MGA)":["Krias Shema, sof zman (MGA)"],"Tefilah, sof zeman (MGA)":["Tefilah, sof zman (MGA)"],"Chatzot HaLailah":["Chatzos HaLailah"],"Chatzot hayom":["Chatzos"],"Tzeit HaKochavim":["Tzeis HaKochavim"],"Birkat Hachamah":["Birkas Hachamah"],"Shushan Purim Katan":["Shushan Purim Koton"]}};var poAshkenazi = {headers:headers$1,contexts:contexts$1};
5891
-
5892
- Locale.addLocale('ashkenazi', poAshkenazi);
5893
- Locale.addLocale('a', poAshkenazi);
5894
-
5895
- const headers={"plural-forms":"nplurals=2; plural=(n > 1);"};const contexts={"":{Shabbat:["שַׁבָּת"],"Daf Yomi":["דַף יוֹמִי"],Parashat:["פָּרָשַׁת"],"Achrei Mot":["אַחֲרֵי מוֹת"],Balak:["בָּלָק"],Bamidbar:["בְּמִדְבַּר"],Bechukotai:["בְּחֻקֹּתַי"],"Beha'alotcha":["בְּהַעֲלֹתְךָ"],Behar:["בְּהַר"],Bereshit:["בְּרֵאשִׁית"],Beshalach:["בְּשַׁלַּח"],Bo:["בֹּא"],"Chayei Sara":["חַיֵּי שָֹרָה"],Chukat:["חֻקַּת"],Devarim:["דְּבָרִים"],Eikev:["עֵקֶב"],Emor:["אֱמוֹר"],"Ha'azinu":["הַאֲזִינוּ"],Kedoshim:["קְדשִׁים"],"Ki Tavo":["כִּי־תָבוֹא"],"Ki Teitzei":["כִּי־תֵצֵא"],"Ki Tisa":["כִּי תִשָּׂא"],Korach:["קוֹרַח"],"Lech-Lecha":["לֶךְ־לְךָ"],Masei:["מַסְעֵי"],Matot:["מַּטּוֹת"],Metzora:["מְּצֹרָע"],Miketz:["מִקֵּץ"],Mishpatim:["מִּשְׁפָּטִים"],Nasso:["נָשׂא"],Nitzavim:["נִצָּבִים"],Noach:["נֹחַ"],Pekudei:["פְקוּדֵי"],Pinchas:["פִּינְחָס"],"Re'eh":["רְאֵה"],"Sh'lach":["שְׁלַח־לְךָ"],Shemot:["שְׁמוֹת"],Shmini:["שְּׁמִינִי"],Shoftim:["שׁוֹפְטִים"],Tazria:["תַזְרִיעַ"],Terumah:["תְּרוּמָה"],Tetzaveh:["תְּצַוֶּה"],Toldot:["תּוֹלְדוֹת"],Tzav:["צַו"],Vaera:["וָאֵרָא"],Vaetchanan:["וָאֶתְחַנַּן"],Vayakhel:["וַיַּקְהֵל"],Vayechi:["וַיְחִי"],Vayeilech:["וַיֵּלֶךְ"],Vayera:["וַיֵּרָא"],Vayeshev:["וַיֵּשֶׁב"],Vayetzei:["וַיֵּצֵא"],Vayigash:["וַיִּגַּשׁ"],Vayikra:["וַיִּקְרָא"],Vayishlach:["וַיִּשְׁלַח"],"Vezot Haberakhah":["וְזֹאת הַבְּרָכָה"],Yitro:["יִתְרוֹ"],"Asara B'Tevet":["עֲשָׂרָה בְּטֵבֵת"],"Candle lighting":["הַדְלָקַת נֵרוֹת"],Chanukah:["חֲנוּכָּה"],"Chanukah: 1 Candle":["חֲנוּכָּה: א׳ נֵר"],"Chanukah: 2 Candles":["חֲנוּכָּה: ב׳ נֵרוֹת"],"Chanukah: 3 Candles":["חֲנוּכָּה: ג׳ נֵרוֹת"],"Chanukah: 4 Candles":["חֲנוּכָּה: ד׳ נֵרוֹת"],"Chanukah: 5 Candles":["חֲנוּכָּה: ה׳ נֵרוֹת"],"Chanukah: 6 Candles":["חֲנוּכָּה: ו׳ נֵרוֹת"],"Chanukah: 7 Candles":["חֲנוּכָּה: ז׳ נֵרוֹת"],"Chanukah: 8 Candles":["חֲנוּכָּה: ח׳ נֵרוֹת"],"Chanukah: 8th Day":["חֲנוּכָּה: יוֹם ח׳"],"Days of the Omer":["סְפִירַת הָעוֹמֶר"],Omer:["עוֹמֶר"],"day of the Omer":["בָּעוֹמֶר"],"Erev Pesach":["עֶרֶב פֶּסַח"],"Erev Purim":["עֶרֶב פּוּרִים"],"Erev Rosh Hashana":["עֶרֶב רֹאשׁ הַשָּׁנָה"],"Erev Shavuot":["עֶרֶב שָׁבוּעוֹת"],"Erev Simchat Torah":["עֶרֶב שִׂמְחַת תּוֹרָה"],"Erev Sukkot":["עֶרֶב סוּכּוֹת"],"Erev Tish'a B'Av":["עֶרֶב תִּשְׁעָה בְּאָב"],"Erev Yom Kippur":["עֶרֶב יוֹם כִּפּוּר"],Havdalah:["הַבְדָּלָה"],"Lag BaOmer":["ל״ג בָּעוֹמֶר"],"Leil Selichot":["סליחות"],Pesach:["פֶּסַח"],"Pesach I":["פֶּסַח א׳"],"Pesach II":["פֶּסַח ב׳"],"Pesach II (CH''M)":["פֶּסַח ב׳ (חוה״מ)"],"Pesach III (CH''M)":["פֶּסַח ג׳ (חוה״מ)"],"Pesach IV (CH''M)":["פֶּסַח ד׳ (חוה״מ)"],"Pesach Sheni":["פֶּסַח שני"],"Pesach V (CH''M)":["פֶּסַח ה׳ (חוה״מ)"],"Pesach VI (CH''M)":["פֶּסַח ו׳ (חוה״מ)"],"Pesach VII":["פֶּסַח ז׳"],"Pesach VIII":["פֶּסַח ח׳"],Purim:["פּוּרִים"],"Purim Katan":["פּוּרִים קָטָן"],"Rosh Chodesh %s":["רֹאשׁ חוֹדֶשׁ %s"],"Rosh Chodesh":["רֹאשׁ חוֹדֶשׁ"],Adar:["אַדָר"],"Adar I":["אַדָר א׳"],"Adar II":["אַדָר ב׳"],Av:["אָב"],Cheshvan:["חֶשְׁוָן"],Elul:["אֱלוּל"],Iyyar:["אִיָיר"],Kislev:["כִּסְלֵו"],Nisan:["נִיסָן"],"Sh'vat":["שְׁבָט"],Sivan:["סִיוָן"],Tamuz:["תַּמּוּז"],Tevet:["טֵבֵת"],Tishrei:["תִּשְׁרֵי"],"Rosh Hashana":["רֹאשׁ הַשָּׁנָה"],"Rosh Hashana I":["רֹאשׁ הַשָּׁנָה א׳"],"Rosh Hashana II":["רֹאשׁ הַשָּׁנָה ב׳"],"Shabbat Chazon":["שַׁבָּת חֲזוֹן"],"Shabbat HaChodesh":["שַׁבָּת הַחֹדֶשׁ"],"Shabbat HaGadol":["שַׁבָּת הַגָּדוֹל"],"Shabbat Machar Chodesh":["שַׁבָּת מָחָר חוֹדֶשׁ"],"Shabbat Nachamu":["שַׁבָּת נַחֲמוּ"],"Shabbat Parah":["שַׁבָּת פּרה"],"Shabbat Rosh Chodesh":["שַׁבָּת רֹאשׁ חוֹדֶשׁ"],"Shabbat Shekalim":["שַׁבָּת שְׁקָלִים"],"Shabbat Shuva":["שַׁבָּת שׁוּבָה"],"Shabbat Zachor":["שַׁבָּת זָכוֹר"],Shavuot:["שָׁבוּעוֹת"],"Shavuot I":["שָׁבוּעוֹת א׳"],"Shavuot II":["שָׁבוּעוֹת ב׳"],"Shmini Atzeret":["שְׁמִינִי עֲצֶרֶת"],"Shushan Purim":["שׁוּשָׁן פּוּרִים"],Sigd:["סיגד"],"Simchat Torah":["שִׂמְחַת תּוֹרָה"],Sukkot:["סוּכּוֹת"],"Sukkot I":["סוּכּוֹת א׳"],"Sukkot II":["סוּכּוֹת ב׳"],"Sukkot II (CH''M)":["סוּכּוֹת ב׳ (חוה״מ)"],"Sukkot III (CH''M)":["סוּכּוֹת ג׳ (חוה״מ)"],"Sukkot IV (CH''M)":["סוּכּוֹת ד׳ (חוה״מ)"],"Sukkot V (CH''M)":["סוּכּוֹת ה׳ (חוה״מ)"],"Sukkot VI (CH''M)":["סוּכּוֹת ו׳ (חוה״מ)"],"Sukkot VII (Hoshana Raba)":["סוּכּוֹת ז׳ (הוֹשַׁעְנָא רַבָּה)"],"Ta'anit Bechorot":["תַּעֲנִית בְּכוֹרוֹת"],"Ta'anit Esther":["תַּעֲנִית אֶסְתֵּר"],"Tish'a B'Av":["תִּשְׁעָה בְּאָב"],"Tu B'Av":["טוּ בְּאָב"],"Tu BiShvat":["טוּ בִּשְׁבָט"],"Tu B'Shvat":["טוּ בִּשְׁבָט"],"Tzom Gedaliah":["צוֹם גְּדַלְיָה"],"Tzom Tammuz":["צוֹם תָּמוּז"],"Yom HaAtzma'ut":["יוֹם הָעַצְמָאוּת"],"Yom HaShoah":["יוֹם הַשּׁוֹאָה"],"Yom HaZikaron":["יוֹם הַזִּכָּרוֹן"],"Yom Kippur":["יוֹם כִּפּוּר"],"Yom Yerushalayim":["יוֹם יְרוּשָׁלַיִם"],"Yom HaAliyah":["יוֹם הַעֲלִיָּה"],"Yom HaAliyah School Observance":["שְׁמִירָת בֵּית הַסֵפֶר לְיוֹם הַעֲלִיָּה"],"Pesach I (on Shabbat)":["פֶּסַח יוֹם א׳ (בְּשַׁבָּת)"],"Pesach Chol ha-Moed Day 1":["פֶּסַח חוֹל הַמּוֹעֵד יוֹם א׳"],"Pesach Chol ha-Moed Day 2":["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ב׳"],"Pesach Chol ha-Moed Day 3":["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ג׳"],"Pesach Chol ha-Moed Day 4":["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ד׳"],"Pesach Chol ha-Moed Day 5":["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ה׳"],"Pesach Shabbat Chol ha-Moed":["פֶּסַח שַׁבָּת חוֹל הַמּוֹעֵד"],"Shavuot II (on Shabbat)":["שָׁבוּעוֹת יוֹם ב׳ (בְּשַׁבָּת)"],"Rosh Hashana I (on Shabbat)":["רֹאשׁ הַשָּׁנָה יוֹם א׳ (בְּשַׁבָּת)"],"Yom Kippur (on Shabbat)":["יוֹם כִּפּוּר (בְּשַׁבָּת)"],"Yom Kippur (Mincha, Traditional)":["יוֹם כִּפּוּר מִנחָה"],"Yom Kippur (Mincha, Alternate)":["יוֹם כִּפּוּר מִנחָה"],"Sukkot I (on Shabbat)":["סוּכּוֹת יוֹם א׳ (בְּשַׁבָּת)"],"Sukkot Chol ha-Moed Day 1":["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם א׳"],"Sukkot Chol ha-Moed Day 2":["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ב׳"],"Sukkot Chol ha-Moed Day 3":["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ג׳"],"Sukkot Chol ha-Moed Day 4":["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ד׳"],"Sukkot Chol ha-Moed Day 5":["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ה׳"],"Sukkot Shabbat Chol ha-Moed":["סוּכּוֹת שַׁבָּת חוֹל הַמּוֹעֵד"],"Sukkot Final Day (Hoshana Raba)":["סוּכּוֹת ז׳ (הוֹשַׁעְנָא רַבָּה)"],"Rosh Chodesh Adar":["רֹאשׁ חוֹדֶשׁ אַדָר"],"Rosh Chodesh Adar I":["רֹאשׁ חוֹדֶשׁ אַדָר א׳"],"Rosh Chodesh Adar II":["רֹאשׁ חוֹדֶשׁ אַדָר ב׳"],"Rosh Chodesh Av":["רֹאשׁ חוֹדֶשׁ אָב"],"Rosh Chodesh Cheshvan":["רֹאשׁ חוֹדֶשׁ חֶשְׁוָן"],"Rosh Chodesh Elul":["רֹאשׁ חוֹדֶשׁ אֱלוּל"],"Rosh Chodesh Iyyar":["רֹאשׁ חוֹדֶשׁ אִיָיר"],"Rosh Chodesh Kislev":["רֹאשׁ חוֹדֶשׁ כִּסְלֵו"],"Rosh Chodesh Nisan":["רֹאשׁ חוֹדֶשׁ נִיסָן"],"Rosh Chodesh Sh'vat":["רֹאשׁ חוֹדֶשׁ שְׁבָט"],"Rosh Chodesh Sivan":["רֹאשׁ חוֹדֶשׁ סִיוָן"],"Rosh Chodesh Tamuz":["רֹאשׁ חוֹדֶשׁ תָּמוּז"],"Rosh Chodesh Tevet":["רֹאשׁ חוֹדֶשׁ טֵבֵת"],min:["דַּקּוֹת"],"Fast begins":["תחילת הַצוֹם"],"Fast ends":["סִיּוּם הַצוֹם"],"Rosh Hashana LaBehemot":["רֹאשׁ הַשָּׁנָה לְמַעְשַׂר בְּהֵמָה"],"Tish'a B'Av (observed)":["תִּשְׁעָה בְּאָב נִדחֶה"],"Shabbat Mevarchim Chodesh":["שַׁבָּת מְבָרְכִים חוֹדֶשׁ"],"Shabbat Shirah":["שַׁבָּת שִׁירָה"],"Chatzot HaLailah":["חֲצוֹת הַלַיְלָה"],"Alot haShachar":["עֲלוֹת הַשַּׁחַר"],Misheyakir:["מִשֶּׁיַּכִּיר"],"Misheyakir Machmir":["מִשֶּׁיַּכִּיר מַחמִיר"],Dawn:["דִּימְדּוּמֵי בּוֹקֵר"],Sunrise:["הַנֵץ הַחַמָּה"],"Kriat Shema, sof zeman":["סוֹף זְמַן קְרִיאַת שְׁמַע גר״א"],"Tefilah, sof zeman":["סוֹף זְמַן תְּפִלָּה גר״א"],"Kriat Shema, sof zeman (MGA)":["סוֹף זְמַן קְרִיאַת שְׁמַע מג״א"],"Tefilah, sof zeman (MGA)":["סוֹף זְמַן תְּפִלָּה מג״א"],"Chatzot hayom":["חֲצוֹת הַיּוֹם"],"Mincha Gedolah":["מִנְחָה גְּדוֹלָה"],"Mincha Ketanah":["מִנְחָה קְטַנָּה"],"Plag HaMincha":["פְּלַג הַמִּנְחָה"],Dusk:["דִּימְדּוּמֵי עֶרֶב"],Sunset:["שְׁקִיעָה"],"Nightfall - End of ordained fasts":["לַיְלָה - גמר תעניות דרבנן"],"Tzeit HaKochavim":["צֵאת הַכּוֹכָבִים"],Lovingkindness:["חֶֽסֶד"],Might:["גְבוּרָה"],Beauty:["תִּפאֶרֶת"],Eternity:["נֶּֽצַח"],Splendor:["הוֹד"],Foundation:["יְּסוֹד"],Majesty:["מַּלְכוּת"],day:["יוֹם"],"Chanukah Day 1":["חֲנוּכָּה יוֹם א׳"],"Chanukah Day 2":["חֲנוּכָּה יוֹם ב׳"],"Chanukah Day 3":["חֲנוּכָּה יוֹם ג׳"],"Chanukah Day 4":["חֲנוּכָּה יוֹם ד׳"],"Chanukah Day 5":["חֲנוּכָּה יוֹם ה׳"],"Chanukah Day 6":["חֲנוּכָּה יוֹם ו׳"],"Chanukah Day 7":["חֲנוּכָּה יוֹם ז׳"],"Chanukah Day 7 (on Rosh Chodesh)":["חֲנוּכָּה יוֹם ז׳ (רֹאשׁ חוֹדֶשׁ)"],"Chanukah Day 8":["חֲנוּכָּה יוֹם ח׳"],"Chanukah Day 1 (on Shabbat)":["חֲנוּכָּה יוֹם א׳ (בְּשַׁבָּת)"],"Chanukah Day 2 (on Shabbat)":["חֲנוּכָּה יוֹם ב׳ (בְּשַׁבָּת)"],"Chanukah Day 3 (on Shabbat)":["חֲנוּכָּה יוֹם ג׳ (בְּשַׁבָּת)"],"Chanukah Day 4 (on Shabbat)":["חֲנוּכָּה יוֹם ד׳ (בְּשַׁבָּת)"],"Chanukah Day 5 (on Shabbat)":["חֲנוּכָּה יוֹם ה׳ (בְּשַׁבָּת)"],"Chanukah Day 7 (on Shabbat)":["חֲנוּכָּה יוֹם ז׳ (בְּשַׁבָּת)"],"Chanukah Day 8 (on Shabbat)":["חֲנוּכָּה יוֹם ח׳ (בְּשַׁבָּת)"],"Shabbat Rosh Chodesh Chanukah":["שַׁבָּת רֹאשׁ חוֹדֶשׁ חֲנוּכָּה"],"Yom Kippur Katan":["יוֹם כִּפּוּר קָטָן"],"Family Day":["יוֹם הַמִּשׁפָּחָה"],"Yitzhak Rabin Memorial Day":["יוֹם הַזִּכָּרוֹן ליצחק רבין"],"Jabotinsky Day":["יוֹם ז׳בוטינסקי"],"Herzl Day":["יוֹם הרצל"],"Ben-Gurion Day":["יוֹם בן־גוריון"],"Birkat Hachamah":["בִרְכַּת הַחַמָּה"],"Shushan Purim Katan":["שׁוּשָׁן פּוּרִים קָטָן"],"Purim Meshulash":["פּוּרִים מְשׁוּלָּשׁ"],"after sunset":["אחרי השקיעה"],Yerushalmi:["יְרוּשַׁלְמִי"],"Chag HaBanot":["חַג הַבָּנוֹת"],Joshua:["יְהוֹשׁוּעַ"],Judges:["שׁוֹפְטִים"],"I Samuel":["שְׁמוּאֵל רִאשׁוֹן"],"II Samuel":["שְׁמוּאֵל שֵׁנִי"],"I Kings":["מְלָכִים רִאשׁוֹן"],"II Kings":["מְלָכִים שֵׁנִי"],Isaiah:["יְשַׁעְיָהוּ"],Jeremiah:["יִרְמְיָהוּ"],Ezekiel:["יְחֶזְקֵאל"],Hosea:["הוֹשֵׁעַ"],Joel:["יוֹאֵל"],Amos:["עָמוּס"],Obadiah:["עוֹבַדְיָה"],Jonah:["יוֹנָה"],Micah:["מִיכָה"],Nachum:["נַחוּם"],Habakkuk:["חֲבַקּוּק"],Zephaniah:["צְפַנְיָה"],Haggai:["חַגַּי"],Zechariah:["זְכַרְיָה"],Malachi:["מַלְאָכִי"],Psalms:["תְּהִלִּים"],Proverbs:["מִשְׁלֵי"],Job:["אִיּוֹב"],"Song of Songs":["שִׁיר הַשִּׁירִים"],Ruth:["רוּת"],Lamentations:["אֵיכָה"],Ecclesiastes:["קֹהֶלֶת"],Esther:["אֶסְתֵּר"],Daniel:["דָּנִיֵּאל"],Ezra:["עֶזְרָא"],Nehemiah:["נְחֶמְיָה"],"I Chronicles":["דִברֵי הַיָמִים רִאשׁוֹן"],"II Chronicles":["דִברֵי הַיָמִים שֵׁנִי"],"Yom Kippur (Mincha)":["יוֹם כִּפּוּר מִנחָה"],"Tish'a B'Av (Mincha)":["תִּשְׁעָה בְּאָב מִנחָה"],"Asara B'Tevet (Mincha)":["עֲשָׂרָה בְּטֵבֵת מִנחָה"],"Ta'anit Bechorot (Mincha)":["תַּעֲנִית בְּכוֹרוֹת מִנחָה"],"Ta'anit Esther (Mincha)":["תַּעֲנִית אֶסְתֵּר מִנחָה"],"Tzom Gedaliah (Mincha)":["צוֹם גְּדַלְיָה מִנחָה"],"Tzom Tammuz (Mincha)":["צוֹם תָּמוּז מִנחָה"],Molad:["מוֹלָד הָלְּבָנָה"],chalakim:["חֲלָקִים"]}};var poHe = {headers:headers,contexts:contexts};
5896
-
5897
- Locale.addLocale('he', poHe);
5898
- Locale.addLocale('h', poHe);
5899
- const heStrs = poHe.contexts[''];
5900
- const heNoNikud = {};
5901
- for (const [key, val] of Object.entries(heStrs)) {
5902
- heNoNikud[key] = [Locale.hebrewStripNikkud(val[0])];
5903
- }
5904
- const poHeNoNikud = {
5905
- headers: poHe.headers,
5906
- contexts: {
5907
- '': heNoNikud
5908
- }
5909
- };
5910
- Locale.addLocale('he-x-NoNikud', poHeNoNikud);
5889
+ // DO NOT EDIT THIS AUTO-GENERATED FILE!
5890
+ const version = '5.0.3';
5911
5891
 
5912
5892
  const NONE$1 = 0;
5913
5893
  const HALF = 1;
@@ -5949,6 +5929,396 @@ function hallel_(events, hdate) {
5949
5929
  return NONE$1;
5950
5930
  }
5951
5931
 
5932
+ var poAshkenazi = {
5933
+ "headers": {
5934
+ "plural-forms": "nplurals=2; plural=(n > 1);"
5935
+ },
5936
+ "contexts": {
5937
+ "": {
5938
+ "Shabbat": ["Shabbos"],
5939
+ "Achrei Mot": ["Achrei Mos"],
5940
+ "Bechukotai": ["Bechukosai"],
5941
+ "Beha'alotcha": ["Beha'aloscha"],
5942
+ "Bereshit": ["Bereshis"],
5943
+ "Chukat": ["Chukas"],
5944
+ "Erev Shavuot": ["Erev Shavuos"],
5945
+ "Erev Sukkot": ["Erev Sukkos"],
5946
+ "Ki Tavo": ["Ki Savo"],
5947
+ "Ki Teitzei": ["Ki Seitzei"],
5948
+ "Ki Tisa": ["Ki Sisa"],
5949
+ "Matot": ["Matos"],
5950
+ "Purim Katan": ["Purim Koton"],
5951
+ "Shabbat Chazon": ["Shabbos Chazon"],
5952
+ "Shabbat HaChodesh": ["Shabbos HaChodesh"],
5953
+ "Shabbat HaGadol": ["Shabbos HaGadol"],
5954
+ "Shabbat Nachamu": ["Shabbos Nachamu"],
5955
+ "Shabbat Parah": ["Shabbos Parah"],
5956
+ "Shabbat Shekalim": ["Shabbos Shekalim"],
5957
+ "Shabbat Shuva": ["Shabbos Shuvah"],
5958
+ "Shabbat Zachor": ["Shabbos Zachor"],
5959
+ "Shavuot": ["Shavuos"],
5960
+ "Shavuot I": ["Shavuos I"],
5961
+ "Shavuot II": ["Shavuos II"],
5962
+ "Shemot": ["Shemos"],
5963
+ "Shmini Atzeret": ["Shmini Atzeres"],
5964
+ "Simchat Torah": ["Simchas Torah"],
5965
+ "Sukkot": ["Sukkos"],
5966
+ "Sukkot I": ["Sukkos I"],
5967
+ "Sukkot II": ["Sukkos II"],
5968
+ "Sukkot II (CH''M)": ["Sukkos II (CH''M)"],
5969
+ "Sukkot III (CH''M)": ["Sukkos III (CH''M)"],
5970
+ "Sukkot IV (CH''M)": ["Sukkos IV (CH''M)"],
5971
+ "Sukkot V (CH''M)": ["Sukkos V (CH''M)"],
5972
+ "Sukkot VI (CH''M)": ["Sukkos VI (CH''M)"],
5973
+ "Sukkot VII (Hoshana Raba)": ["Sukkos VII (Hoshana Raba)"],
5974
+ "Ta'anit Bechorot": ["Ta'anis Bechoros"],
5975
+ "Ta'anit Esther": ["Ta'anis Esther"],
5976
+ "Toldot": ["Toldos"],
5977
+ "Vaetchanan": ["Vaeschanan"],
5978
+ "Yitro": ["Yisro"],
5979
+ "Vezot Haberakhah": ["Vezos Haberakhah"],
5980
+ "Parashat": ["Parshas"],
5981
+ "Leil Selichot": ["Leil Selichos"],
5982
+ "Shabbat Mevarchim Chodesh": ["Shabbos Mevorchim Chodesh"],
5983
+ "Shabbat Shirah": ["Shabbos Shirah"],
5984
+ "Tevet": ["Teves"],
5985
+ "Asara B'Tevet": ["Asara B'Teves"],
5986
+ "Alot HaShachar": ["Alos HaShachar"],
5987
+ "Kriat Shema, sof zeman": ["Krias Shema, sof zman"],
5988
+ "Tefilah, sof zeman": ["Tefilah, sof zman"],
5989
+ "Kriat Shema, sof zeman (MGA)": ["Krias Shema, sof zman (MGA)"],
5990
+ "Tefilah, sof zeman (MGA)": ["Tefilah, sof zman (MGA)"],
5991
+ "Chatzot HaLailah": ["Chatzos HaLailah"],
5992
+ "Chatzot hayom": ["Chatzos"],
5993
+ "Tzeit HaKochavim": ["Tzeis HaKochavim"],
5994
+ "Birkat Hachamah": ["Birkas Hachamah"],
5995
+ "Shushan Purim Katan": ["Shushan Purim Koton"]
5996
+ }
5997
+ }
5998
+ };
5999
+
6000
+ Locale.addLocale('ashkenazi', poAshkenazi);
6001
+ Locale.addLocale('a', poAshkenazi);
6002
+
6003
+ var poHe = {
6004
+ "headers": {
6005
+ "plural-forms": "nplurals=2; plural=(n > 1);"
6006
+ },
6007
+ "contexts": {
6008
+ "": {
6009
+ "Shabbat": ["שַׁבָּת"],
6010
+ "Daf Yomi": ["דַף יוֹמִי"],
6011
+ "Parashat": ["פָּרָשַׁת"],
6012
+ "Achrei Mot": ["אַחֲרֵי מוֹת"],
6013
+ "Balak": ["בָּלָק"],
6014
+ "Bamidbar": ["בְּמִדְבַּר"],
6015
+ "Bechukotai": ["בְּחֻקֹּתַי"],
6016
+ "Beha'alotcha": ["בְּהַעֲלֹתְךָ"],
6017
+ "Behar": ["בְּהַר"],
6018
+ "Bereshit": ["בְּרֵאשִׁית"],
6019
+ "Beshalach": ["בְּשַׁלַּח"],
6020
+ "Bo": ["בֹּא"],
6021
+ "Chayei Sara": ["חַיֵּי שָֹרָה"],
6022
+ "Chukat": ["חֻקַּת"],
6023
+ "Devarim": ["דְּבָרִים"],
6024
+ "Eikev": ["עֵקֶב"],
6025
+ "Emor": ["אֱמוֹר"],
6026
+ "Ha'azinu": ["הַאֲזִינוּ"],
6027
+ "Kedoshim": ["קְדשִׁים"],
6028
+ "Ki Tavo": ["כִּי־תָבוֹא"],
6029
+ "Ki Teitzei": ["כִּי־תֵצֵא"],
6030
+ "Ki Tisa": ["כִּי תִשָּׂא"],
6031
+ "Korach": ["קוֹרַח"],
6032
+ "Lech-Lecha": ["לֶךְ־לְךָ"],
6033
+ "Masei": ["מַסְעֵי"],
6034
+ "Matot": ["מַּטּוֹת"],
6035
+ "Metzora": ["מְּצֹרָע"],
6036
+ "Miketz": ["מִקֵּץ"],
6037
+ "Mishpatim": ["מִּשְׁפָּטִים"],
6038
+ "Nasso": ["נָשׂא"],
6039
+ "Nitzavim": ["נִצָּבִים"],
6040
+ "Noach": ["נֹחַ"],
6041
+ "Pekudei": ["פְקוּדֵי"],
6042
+ "Pinchas": ["פִּינְחָס"],
6043
+ "Re'eh": ["רְאֵה"],
6044
+ "Sh'lach": ["שְׁלַח־לְךָ"],
6045
+ "Shemot": ["שְׁמוֹת"],
6046
+ "Shmini": ["שְּׁמִינִי"],
6047
+ "Shoftim": ["שׁוֹפְטִים"],
6048
+ "Tazria": ["תַזְרִיעַ"],
6049
+ "Terumah": ["תְּרוּמָה"],
6050
+ "Tetzaveh": ["תְּצַוֶּה"],
6051
+ "Toldot": ["תּוֹלְדוֹת"],
6052
+ "Tzav": ["צַו"],
6053
+ "Vaera": ["וָאֵרָא"],
6054
+ "Vaetchanan": ["וָאֶתְחַנַּן"],
6055
+ "Vayakhel": ["וַיַּקְהֵל"],
6056
+ "Vayechi": ["וַיְחִי"],
6057
+ "Vayeilech": ["וַיֵּלֶךְ"],
6058
+ "Vayera": ["וַיֵּרָא"],
6059
+ "Vayeshev": ["וַיֵּשֶׁב"],
6060
+ "Vayetzei": ["וַיֵּצֵא"],
6061
+ "Vayigash": ["וַיִּגַּשׁ"],
6062
+ "Vayikra": ["וַיִּקְרָא"],
6063
+ "Vayishlach": ["וַיִּשְׁלַח"],
6064
+ "Vezot Haberakhah": ["וְזֹאת הַבְּרָכָה"],
6065
+ "Yitro": ["יִתְרוֹ"],
6066
+ "Asara B'Tevet": ["עֲשָׂרָה בְּטֵבֵת"],
6067
+ "Candle lighting": ["הַדְלָקַת נֵרוֹת"],
6068
+ "Chanukah": ["חֲנוּכָּה"],
6069
+ "Chanukah: 1 Candle": ["חֲנוּכָּה: א׳ נֵר"],
6070
+ "Chanukah: 2 Candles": ["חֲנוּכָּה: ב׳ נֵרוֹת"],
6071
+ "Chanukah: 3 Candles": ["חֲנוּכָּה: ג׳ נֵרוֹת"],
6072
+ "Chanukah: 4 Candles": ["חֲנוּכָּה: ד׳ נֵרוֹת"],
6073
+ "Chanukah: 5 Candles": ["חֲנוּכָּה: ה׳ נֵרוֹת"],
6074
+ "Chanukah: 6 Candles": ["חֲנוּכָּה: ו׳ נֵרוֹת"],
6075
+ "Chanukah: 7 Candles": ["חֲנוּכָּה: ז׳ נֵרוֹת"],
6076
+ "Chanukah: 8 Candles": ["חֲנוּכָּה: ח׳ נֵרוֹת"],
6077
+ "Chanukah: 8th Day": ["חֲנוּכָּה: יוֹם ח׳"],
6078
+ "Days of the Omer": ["סְפִירַת הָעוֹמֶר"],
6079
+ "Omer": ["עוֹמֶר"],
6080
+ "day of the Omer": ["בָּעוֹמֶר"],
6081
+ "Erev Pesach": ["עֶרֶב פֶּסַח"],
6082
+ "Erev Purim": ["עֶרֶב פּוּרִים"],
6083
+ "Erev Rosh Hashana": ["עֶרֶב רֹאשׁ הַשָּׁנָה"],
6084
+ "Erev Shavuot": ["עֶרֶב שָׁבוּעוֹת"],
6085
+ "Erev Simchat Torah": ["עֶרֶב שִׂמְחַת תּוֹרָה"],
6086
+ "Erev Sukkot": ["עֶרֶב סוּכּוֹת"],
6087
+ "Erev Tish'a B'Av": ["עֶרֶב תִּשְׁעָה בְּאָב"],
6088
+ "Erev Yom Kippur": ["עֶרֶב יוֹם כִּפּוּר"],
6089
+ "Havdalah": ["הַבְדָּלָה"],
6090
+ "Lag BaOmer": ["ל״ג בָּעוֹמֶר"],
6091
+ "Leil Selichot": ["סליחות"],
6092
+ "Pesach": ["פֶּסַח"],
6093
+ "Pesach I": ["פֶּסַח א׳"],
6094
+ "Pesach II": ["פֶּסַח ב׳"],
6095
+ "Pesach II (CH''M)": ["פֶּסַח ב׳ (חוה״מ)"],
6096
+ "Pesach III (CH''M)": ["פֶּסַח ג׳ (חוה״מ)"],
6097
+ "Pesach IV (CH''M)": ["פֶּסַח ד׳ (חוה״מ)"],
6098
+ "Pesach Sheni": ["פֶּסַח שני"],
6099
+ "Pesach V (CH''M)": ["פֶּסַח ה׳ (חוה״מ)"],
6100
+ "Pesach VI (CH''M)": ["פֶּסַח ו׳ (חוה״מ)"],
6101
+ "Pesach VII": ["פֶּסַח ז׳"],
6102
+ "Pesach VIII": ["פֶּסַח ח׳"],
6103
+ "Purim": ["פּוּרִים"],
6104
+ "Purim Katan": ["פּוּרִים קָטָן"],
6105
+ "Rosh Chodesh %s": ["רֹאשׁ חוֹדֶשׁ %s"],
6106
+ "Rosh Chodesh": ["רֹאשׁ חוֹדֶשׁ"],
6107
+ "Adar": ["אַדָר"],
6108
+ "Adar I": ["אַדָר א׳"],
6109
+ "Adar II": ["אַדָר ב׳"],
6110
+ "Av": ["אָב"],
6111
+ "Cheshvan": ["חֶשְׁוָן"],
6112
+ "Elul": ["אֱלוּל"],
6113
+ "Iyyar": ["אִיָיר"],
6114
+ "Kislev": ["כִּסְלֵו"],
6115
+ "Nisan": ["נִיסָן"],
6116
+ "Sh'vat": ["שְׁבָט"],
6117
+ "Sivan": ["סִיוָן"],
6118
+ "Tamuz": ["תַּמּוּז"],
6119
+ "Tevet": ["טֵבֵת"],
6120
+ "Tishrei": ["תִּשְׁרֵי"],
6121
+ "Rosh Hashana": ["רֹאשׁ הַשָּׁנָה"],
6122
+ "Rosh Hashana I": ["רֹאשׁ הַשָּׁנָה א׳"],
6123
+ "Rosh Hashana II": ["רֹאשׁ הַשָּׁנָה ב׳"],
6124
+ "Shabbat Chazon": ["שַׁבָּת חֲזוֹן"],
6125
+ "Shabbat HaChodesh": ["שַׁבָּת הַחֹדֶשׁ"],
6126
+ "Shabbat HaGadol": ["שַׁבָּת הַגָּדוֹל"],
6127
+ "Shabbat Machar Chodesh": ["שַׁבָּת מָחָר חוֹדֶשׁ"],
6128
+ "Shabbat Nachamu": ["שַׁבָּת נַחֲמוּ"],
6129
+ "Shabbat Parah": ["שַׁבָּת פּרה"],
6130
+ "Shabbat Rosh Chodesh": ["שַׁבָּת רֹאשׁ חוֹדֶשׁ"],
6131
+ "Shabbat Shekalim": ["שַׁבָּת שְׁקָלִים"],
6132
+ "Shabbat Shuva": ["שַׁבָּת שׁוּבָה"],
6133
+ "Shabbat Zachor": ["שַׁבָּת זָכוֹר"],
6134
+ "Shavuot": ["שָׁבוּעוֹת"],
6135
+ "Shavuot I": ["שָׁבוּעוֹת א׳"],
6136
+ "Shavuot II": ["שָׁבוּעוֹת ב׳"],
6137
+ "Shmini Atzeret": ["שְׁמִינִי עֲצֶרֶת"],
6138
+ "Shushan Purim": ["שׁוּשָׁן פּוּרִים"],
6139
+ "Sigd": ["סיגד"],
6140
+ "Simchat Torah": ["שִׂמְחַת תּוֹרָה"],
6141
+ "Sukkot": ["סוּכּוֹת"],
6142
+ "Sukkot I": ["סוּכּוֹת א׳"],
6143
+ "Sukkot II": ["סוּכּוֹת ב׳"],
6144
+ "Sukkot II (CH''M)": ["סוּכּוֹת ב׳ (חוה״מ)"],
6145
+ "Sukkot III (CH''M)": ["סוּכּוֹת ג׳ (חוה״מ)"],
6146
+ "Sukkot IV (CH''M)": ["סוּכּוֹת ד׳ (חוה״מ)"],
6147
+ "Sukkot V (CH''M)": ["סוּכּוֹת ה׳ (חוה״מ)"],
6148
+ "Sukkot VI (CH''M)": ["סוּכּוֹת ו׳ (חוה״מ)"],
6149
+ "Sukkot VII (Hoshana Raba)": ["סוּכּוֹת ז׳ (הוֹשַׁעְנָא רַבָּה)"],
6150
+ "Ta'anit Bechorot": ["תַּעֲנִית בְּכוֹרוֹת"],
6151
+ "Ta'anit Esther": ["תַּעֲנִית אֶסְתֵּר"],
6152
+ "Tish'a B'Av": ["תִּשְׁעָה בְּאָב"],
6153
+ "Tu B'Av": ["טוּ בְּאָב"],
6154
+ "Tu BiShvat": ["טוּ בִּשְׁבָט"],
6155
+ "Tu B'Shvat": ["טוּ בִּשְׁבָט"],
6156
+ "Tzom Gedaliah": ["צוֹם גְּדַלְיָה"],
6157
+ "Tzom Tammuz": ["צוֹם תָּמוּז"],
6158
+ "Yom HaAtzma'ut": ["יוֹם הָעַצְמָאוּת"],
6159
+ "Yom HaShoah": ["יוֹם הַשּׁוֹאָה"],
6160
+ "Yom HaZikaron": ["יוֹם הַזִּכָּרוֹן"],
6161
+ "Yom Kippur": ["יוֹם כִּפּוּר"],
6162
+ "Yom Yerushalayim": ["יוֹם יְרוּשָׁלַיִם"],
6163
+ "Yom HaAliyah": ["יוֹם הַעֲלִיָּה"],
6164
+ "Yom HaAliyah School Observance": ["שְׁמִירָת בֵּית הַסֵפֶר לְיוֹם הַעֲלִיָּה"],
6165
+ "Pesach I (on Shabbat)": ["פֶּסַח יוֹם א׳ (בְּשַׁבָּת)"],
6166
+ "Pesach Chol ha-Moed Day 1": ["פֶּסַח חוֹל הַמּוֹעֵד יוֹם א׳"],
6167
+ "Pesach Chol ha-Moed Day 2": ["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ב׳"],
6168
+ "Pesach Chol ha-Moed Day 3": ["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ג׳"],
6169
+ "Pesach Chol ha-Moed Day 4": ["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ד׳"],
6170
+ "Pesach Chol ha-Moed Day 5": ["פֶּסַח חוֹל הַמּוֹעֵד יוֹם ה׳"],
6171
+ "Pesach Shabbat Chol ha-Moed": ["פֶּסַח שַׁבָּת חוֹל הַמּוֹעֵד"],
6172
+ "Shavuot II (on Shabbat)": ["שָׁבוּעוֹת יוֹם ב׳ (בְּשַׁבָּת)"],
6173
+ "Rosh Hashana I (on Shabbat)": ["רֹאשׁ הַשָּׁנָה יוֹם א׳ (בְּשַׁבָּת)"],
6174
+ "Yom Kippur (on Shabbat)": ["יוֹם כִּפּוּר (בְּשַׁבָּת)"],
6175
+ "Yom Kippur (Mincha, Traditional)": ["יוֹם כִּפּוּר מִנחָה"],
6176
+ "Yom Kippur (Mincha, Alternate)": ["יוֹם כִּפּוּר מִנחָה"],
6177
+ "Sukkot I (on Shabbat)": ["סוּכּוֹת יוֹם א׳ (בְּשַׁבָּת)"],
6178
+ "Sukkot Chol ha-Moed Day 1": ["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם א׳"],
6179
+ "Sukkot Chol ha-Moed Day 2": ["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ב׳"],
6180
+ "Sukkot Chol ha-Moed Day 3": ["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ג׳"],
6181
+ "Sukkot Chol ha-Moed Day 4": ["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ד׳"],
6182
+ "Sukkot Chol ha-Moed Day 5": ["סוּכּוֹת חוֹל הַמּוֹעֵד יוֹם ה׳"],
6183
+ "Sukkot Shabbat Chol ha-Moed": ["סוּכּוֹת שַׁבָּת חוֹל הַמּוֹעֵד"],
6184
+ "Sukkot Final Day (Hoshana Raba)": ["סוּכּוֹת ז׳ (הוֹשַׁעְנָא רַבָּה)"],
6185
+ "Rosh Chodesh Adar": ["רֹאשׁ חוֹדֶשׁ אַדָר"],
6186
+ "Rosh Chodesh Adar I": ["רֹאשׁ חוֹדֶשׁ אַדָר א׳"],
6187
+ "Rosh Chodesh Adar II": ["רֹאשׁ חוֹדֶשׁ אַדָר ב׳"],
6188
+ "Rosh Chodesh Av": ["רֹאשׁ חוֹדֶשׁ אָב"],
6189
+ "Rosh Chodesh Cheshvan": ["רֹאשׁ חוֹדֶשׁ חֶשְׁוָן"],
6190
+ "Rosh Chodesh Elul": ["רֹאשׁ חוֹדֶשׁ אֱלוּל"],
6191
+ "Rosh Chodesh Iyyar": ["רֹאשׁ חוֹדֶשׁ אִיָיר"],
6192
+ "Rosh Chodesh Kislev": ["רֹאשׁ חוֹדֶשׁ כִּסְלֵו"],
6193
+ "Rosh Chodesh Nisan": ["רֹאשׁ חוֹדֶשׁ נִיסָן"],
6194
+ "Rosh Chodesh Sh'vat": ["רֹאשׁ חוֹדֶשׁ שְׁבָט"],
6195
+ "Rosh Chodesh Sivan": ["רֹאשׁ חוֹדֶשׁ סִיוָן"],
6196
+ "Rosh Chodesh Tamuz": ["רֹאשׁ חוֹדֶשׁ תָּמוּז"],
6197
+ "Rosh Chodesh Tevet": ["רֹאשׁ חוֹדֶשׁ טֵבֵת"],
6198
+ "min": ["דַּקּוֹת"],
6199
+ "Fast begins": ["תחילת הַצוֹם"],
6200
+ "Fast ends": ["סִיּוּם הַצוֹם"],
6201
+ "Rosh Hashana LaBehemot": ["רֹאשׁ הַשָּׁנָה לְמַעְשַׂר בְּהֵמָה"],
6202
+ "Tish'a B'Av (observed)": ["תִּשְׁעָה בְּאָב נִדחֶה"],
6203
+ "Shabbat Mevarchim Chodesh": ["שַׁבָּת מְבָרְכִים חוֹדֶשׁ"],
6204
+ "Shabbat Shirah": ["שַׁבָּת שִׁירָה"],
6205
+ "Chatzot HaLailah": ["חֲצוֹת הַלַיְלָה"],
6206
+ "Alot haShachar": ["עֲלוֹת הַשַּׁחַר"],
6207
+ "Misheyakir": ["מִשֶּׁיַּכִּיר"],
6208
+ "Misheyakir Machmir": ["מִשֶּׁיַּכִּיר מַחמִיר"],
6209
+ "Dawn": ["דִּימְדּוּמֵי בּוֹקֵר"],
6210
+ "Sunrise": ["הַנֵץ הַחַמָּה"],
6211
+ "Kriat Shema, sof zeman": ["סוֹף זְמַן קְרִיאַת שְׁמַע גר״א"],
6212
+ "Tefilah, sof zeman": ["סוֹף זְמַן תְּפִלָּה גר״א"],
6213
+ "Kriat Shema, sof zeman (MGA)": ["סוֹף זְמַן קְרִיאַת שְׁמַע מג״א"],
6214
+ "Tefilah, sof zeman (MGA)": ["סוֹף זְמַן תְּפִלָּה מג״א"],
6215
+ "Chatzot hayom": ["חֲצוֹת הַיּוֹם"],
6216
+ "Mincha Gedolah": ["מִנְחָה גְּדוֹלָה"],
6217
+ "Mincha Ketanah": ["מִנְחָה קְטַנָּה"],
6218
+ "Plag HaMincha": ["פְּלַג הַמִּנְחָה"],
6219
+ "Dusk": ["דִּימְדּוּמֵי עֶרֶב"],
6220
+ "Sunset": ["שְׁקִיעָה"],
6221
+ "Nightfall - End of ordained fasts": ["לַיְלָה - גמר תעניות דרבנן"],
6222
+ "Tzeit HaKochavim": ["צֵאת הַכּוֹכָבִים"],
6223
+ "Lovingkindness": ["חֶֽסֶד"],
6224
+ "Might": ["גְבוּרָה"],
6225
+ "Beauty": ["תִּפאֶרֶת"],
6226
+ "Eternity": ["נֶּֽצַח"],
6227
+ "Splendor": ["הוֹד"],
6228
+ "Foundation": ["יְּסוֹד"],
6229
+ "Majesty": ["מַּלְכוּת"],
6230
+ "day": ["יוֹם"],
6231
+ "Chanukah Day 1": ["חֲנוּכָּה יוֹם א׳"],
6232
+ "Chanukah Day 2": ["חֲנוּכָּה יוֹם ב׳"],
6233
+ "Chanukah Day 3": ["חֲנוּכָּה יוֹם ג׳"],
6234
+ "Chanukah Day 4": ["חֲנוּכָּה יוֹם ד׳"],
6235
+ "Chanukah Day 5": ["חֲנוּכָּה יוֹם ה׳"],
6236
+ "Chanukah Day 6": ["חֲנוּכָּה יוֹם ו׳"],
6237
+ "Chanukah Day 7": ["חֲנוּכָּה יוֹם ז׳"],
6238
+ "Chanukah Day 7 (on Rosh Chodesh)": ["חֲנוּכָּה יוֹם ז׳ (רֹאשׁ חוֹדֶשׁ)"],
6239
+ "Chanukah Day 8": ["חֲנוּכָּה יוֹם ח׳"],
6240
+ "Chanukah Day 1 (on Shabbat)": ["חֲנוּכָּה יוֹם א׳ (בְּשַׁבָּת)"],
6241
+ "Chanukah Day 2 (on Shabbat)": ["חֲנוּכָּה יוֹם ב׳ (בְּשַׁבָּת)"],
6242
+ "Chanukah Day 3 (on Shabbat)": ["חֲנוּכָּה יוֹם ג׳ (בְּשַׁבָּת)"],
6243
+ "Chanukah Day 4 (on Shabbat)": ["חֲנוּכָּה יוֹם ד׳ (בְּשַׁבָּת)"],
6244
+ "Chanukah Day 5 (on Shabbat)": ["חֲנוּכָּה יוֹם ה׳ (בְּשַׁבָּת)"],
6245
+ "Chanukah Day 7 (on Shabbat)": ["חֲנוּכָּה יוֹם ז׳ (בְּשַׁבָּת)"],
6246
+ "Chanukah Day 8 (on Shabbat)": ["חֲנוּכָּה יוֹם ח׳ (בְּשַׁבָּת)"],
6247
+ "Shabbat Rosh Chodesh Chanukah": ["שַׁבָּת רֹאשׁ חוֹדֶשׁ חֲנוּכָּה"],
6248
+ "Yom Kippur Katan": ["יוֹם כִּפּוּר קָטָן"],
6249
+ "Family Day": ["יוֹם הַמִּשׁפָּחָה"],
6250
+ "Yitzhak Rabin Memorial Day": ["יוֹם הַזִּכָּרוֹן ליצחק רבין"],
6251
+ "Jabotinsky Day": ["יוֹם ז׳בוטינסקי"],
6252
+ "Herzl Day": ["יוֹם הרצל"],
6253
+ "Ben-Gurion Day": ["יוֹם בן־גוריון"],
6254
+ "Birkat Hachamah": ["בִרְכַּת הַחַמָּה"],
6255
+ "Shushan Purim Katan": ["שׁוּשָׁן פּוּרִים קָטָן"],
6256
+ "Purim Meshulash": ["פּוּרִים מְשׁוּלָּשׁ"],
6257
+ "after sunset": ["אחרי השקיעה"],
6258
+ "Yerushalmi": ["יְרוּשַׁלְמִי"],
6259
+ "Chag HaBanot": ["חַג הַבָּנוֹת"],
6260
+ "Joshua": ["יְהוֹשׁוּעַ"],
6261
+ "Judges": ["שׁוֹפְטִים"],
6262
+ "I Samuel": ["שְׁמוּאֵל רִאשׁוֹן"],
6263
+ "II Samuel": ["שְׁמוּאֵל שֵׁנִי"],
6264
+ "I Kings": ["מְלָכִים רִאשׁוֹן"],
6265
+ "II Kings": ["מְלָכִים שֵׁנִי"],
6266
+ "Isaiah": ["יְשַׁעְיָהוּ"],
6267
+ "Jeremiah": ["יִרְמְיָהוּ"],
6268
+ "Ezekiel": ["יְחֶזְקֵאל"],
6269
+ "Hosea": ["הוֹשֵׁעַ"],
6270
+ "Joel": ["יוֹאֵל"],
6271
+ "Amos": ["עָמוּס"],
6272
+ "Obadiah": ["עוֹבַדְיָה"],
6273
+ "Jonah": ["יוֹנָה"],
6274
+ "Micah": ["מִיכָה"],
6275
+ "Nachum": ["נַחוּם"],
6276
+ "Habakkuk": ["חֲבַקּוּק"],
6277
+ "Zephaniah": ["צְפַנְיָה"],
6278
+ "Haggai": ["חַגַּי"],
6279
+ "Zechariah": ["זְכַרְיָה"],
6280
+ "Malachi": ["מַלְאָכִי"],
6281
+ "Psalms": ["תְּהִלִּים"],
6282
+ "Proverbs": ["מִשְׁלֵי"],
6283
+ "Job": ["אִיּוֹב"],
6284
+ "Song of Songs": ["שִׁיר הַשִּׁירִים"],
6285
+ "Ruth": ["רוּת"],
6286
+ "Lamentations": ["אֵיכָה"],
6287
+ "Ecclesiastes": ["קֹהֶלֶת"],
6288
+ "Esther": ["אֶסְתֵּר"],
6289
+ "Daniel": ["דָּנִיֵּאל"],
6290
+ "Ezra": ["עֶזְרָא"],
6291
+ "Nehemiah": ["נְחֶמְיָה"],
6292
+ "I Chronicles": ["דִברֵי הַיָמִים רִאשׁוֹן"],
6293
+ "II Chronicles": ["דִברֵי הַיָמִים שֵׁנִי"],
6294
+ "Yom Kippur (Mincha)": ["יוֹם כִּפּוּר מִנחָה"],
6295
+ "Tish'a B'Av (Mincha)": ["תִּשְׁעָה בְּאָב מִנחָה"],
6296
+ "Asara B'Tevet (Mincha)": ["עֲשָׂרָה בְּטֵבֵת מִנחָה"],
6297
+ "Ta'anit Bechorot (Mincha)": ["תַּעֲנִית בְּכוֹרוֹת מִנחָה"],
6298
+ "Ta'anit Esther (Mincha)": ["תַּעֲנִית אֶסְתֵּר מִנחָה"],
6299
+ "Tzom Gedaliah (Mincha)": ["צוֹם גְּדַלְיָה מִנחָה"],
6300
+ "Tzom Tammuz (Mincha)": ["צוֹם תָּמוּז מִנחָה"],
6301
+ "Molad": ["מוֹלָד הָלְּבָנָה"],
6302
+ "chalakim": ["חֲלָקִים"]
6303
+ }
6304
+ }
6305
+ };
6306
+
6307
+ Locale.addLocale('he', poHe);
6308
+ Locale.addLocale('h', poHe);
6309
+ const heStrs = poHe.contexts[''];
6310
+ const heNoNikud = {};
6311
+ for (const [key, val] of Object.entries(heStrs)) {
6312
+ heNoNikud[key] = [Locale.hebrewStripNikkud(val[0])];
6313
+ }
6314
+ const poHeNoNikud = {
6315
+ headers: poHe.headers,
6316
+ contexts: {
6317
+ '': heNoNikud
6318
+ }
6319
+ };
6320
+ Locale.addLocale('he-x-NoNikud', poHeNoNikud);
6321
+
5952
6322
  /**
5953
6323
  * @private
5954
6324
  * @param {number} start
@@ -6111,10 +6481,7 @@ function tachanunYear(year, il) {
6111
6481
  const FRI = 5;
6112
6482
  const SAT = 6;
6113
6483
  const NISAN = months.NISAN;
6114
- // const IYYAR = months.IYYAR;
6115
6484
  const SIVAN = months.SIVAN;
6116
- // const TAMUZ = months.TAMUZ;
6117
- // const AV = months.AV;
6118
6485
  const ELUL = months.ELUL;
6119
6486
  const TISHREI = months.TISHREI;
6120
6487
  const LIGHT_CANDLES = flags.LIGHT_CANDLES;
@@ -6547,6 +6914,7 @@ function observedInDiaspora(ev) {
6547
6914
  return ev.observedInDiaspora();
6548
6915
  }
6549
6916
  const yearArrayCache = new Map();
6917
+ const holidaysOnDate = new Map();
6550
6918
 
6551
6919
  /**
6552
6920
  * HebrewCalendar is the main interface to the `@hebcal/core` library.
@@ -6894,20 +7262,29 @@ class HebrewCalendar {
6894
7262
  }
6895
7263
 
6896
7264
  /**
6897
- * Returns an array of Events on this date (or undefined if no events)
7265
+ * Returns an array of Events on this date (or `undefined` if no events)
6898
7266
  * @param {HDate|Date|number} date Hebrew Date, Gregorian date, or absolute R.D. day number
6899
7267
  * @param {boolean} [il] use the Israeli schedule for holidays
6900
7268
  * @return {Event[]}
6901
7269
  */
6902
7270
  static getHolidaysOnDate(date, il) {
6903
7271
  const hd = HDate.isHDate(date) ? date : new HDate(date);
7272
+ const hdStr = hd.toString();
7273
+ const cacheKey = hdStr + '/' + (typeof il === 'undefined' ? 2 : il ? 1 : 0);
7274
+ if (holidaysOnDate.has(cacheKey)) {
7275
+ return holidaysOnDate.get(cacheKey);
7276
+ }
6904
7277
  const yearMap = getHolidaysForYear_(hd.getFullYear());
6905
- const events = yearMap.get(hd.toString());
7278
+ const events = yearMap.get(hdStr);
7279
+ // if il isn't a boolean return both diaspora + IL for day
6906
7280
  if (typeof il === 'undefined' || typeof events === 'undefined') {
7281
+ holidaysOnDate.set(cacheKey, events);
6907
7282
  return events;
6908
7283
  }
6909
7284
  const myFilter = il ? observedInIsrael : observedInDiaspora;
6910
- return events.filter(myFilter);
7285
+ const filtered = events.filter(myFilter);
7286
+ holidaysOnDate.set(cacheKey, filtered);
7287
+ return filtered;
6911
7288
  }
6912
7289
 
6913
7290
  /**