@hebcal/core 5.6.1 → 5.7.1

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 (110) hide show
  1. package/README.md +23 -1
  2. package/dist/CalOptions.d.ts +1 -1
  3. package/dist/HolidayEvent.d.ts +0 -5
  4. package/dist/YomKippurKatanEvent.d.ts +0 -1
  5. package/dist/bundle.js +9739 -9578
  6. package/dist/bundle.js.map +1 -1
  7. package/dist/bundle.min.js +2 -2
  8. package/dist/bundle.min.js.map +1 -1
  9. package/dist/calendar.d.ts +110 -0
  10. package/dist/candles.d.ts +10 -1
  11. package/dist/es/CalOptions.d.ts +158 -0
  12. package/dist/es/DailyLearning.d.ts +21 -0
  13. package/dist/es/DailyLearning.js +36 -0
  14. package/dist/es/DailyLearning.js.map +1 -0
  15. package/dist/es/HebrewDateEvent.d.ts +37 -0
  16. package/dist/es/HebrewDateEvent.js +77 -0
  17. package/dist/es/HebrewDateEvent.js.map +1 -0
  18. package/dist/es/HolidayEvent.d.ts +76 -0
  19. package/dist/es/HolidayEvent.js +165 -0
  20. package/dist/es/HolidayEvent.js.map +1 -0
  21. package/dist/es/MevarchimChodeshEvent.d.ts +25 -0
  22. package/dist/es/MevarchimChodeshEvent.js +54 -0
  23. package/dist/es/MevarchimChodeshEvent.js.map +1 -0
  24. package/dist/es/ParshaEvent.d.ts +23 -0
  25. package/dist/es/ParshaEvent.js +53 -0
  26. package/dist/es/ParshaEvent.js.map +1 -0
  27. package/dist/es/TimedEvent.d.ts +47 -0
  28. package/dist/es/TimedEvent.js +97 -0
  29. package/dist/es/TimedEvent.js.map +1 -0
  30. package/dist/es/YomKippurKatanEvent.d.ts +23 -0
  31. package/dist/es/YomKippurKatanEvent.js +43 -0
  32. package/dist/es/YomKippurKatanEvent.js.map +1 -0
  33. package/dist/es/ashkenazi.po.d.ts +67 -0
  34. package/dist/es/ashkenazi.po.js +5 -0
  35. package/dist/es/ashkenazi.po.js.map +1 -0
  36. package/dist/es/calendar.d.ts +110 -0
  37. package/dist/es/calendar.js +615 -0
  38. package/dist/es/calendar.js.map +1 -0
  39. package/dist/es/candles.d.ts +37 -0
  40. package/dist/es/candles.js +161 -0
  41. package/dist/es/candles.js.map +1 -0
  42. package/dist/es/event.d.ts +187 -0
  43. package/dist/es/event.js +243 -0
  44. package/dist/es/event.js.map +1 -0
  45. package/dist/es/getStartAndEnd.d.ts +6 -0
  46. package/dist/es/getStartAndEnd.js +102 -0
  47. package/dist/es/getStartAndEnd.js.map +1 -0
  48. package/dist/es/hallel.d.ts +6 -0
  49. package/dist/es/hallel.js +52 -0
  50. package/dist/es/hallel.js.map +1 -0
  51. package/dist/es/he.po.d.ts +246 -0
  52. package/dist/es/he.po.js +5 -0
  53. package/dist/es/he.po.js.map +1 -0
  54. package/dist/es/hebcal.d.ts +259 -0
  55. package/dist/es/hebcal.js +336 -0
  56. package/dist/es/hebcal.js.map +1 -0
  57. package/dist/es/holidays.d.ts +22 -0
  58. package/dist/es/holidays.js +321 -0
  59. package/dist/es/holidays.js.map +1 -0
  60. package/dist/es/index.d.ts +23 -0
  61. package/dist/es/index.js +22 -0
  62. package/dist/es/index.js.map +1 -0
  63. package/dist/es/locale.d.ts +1 -0
  64. package/dist/es/locale.js +21 -0
  65. package/dist/es/locale.js.map +1 -0
  66. package/dist/es/location.d.ts +73 -0
  67. package/dist/es/location.js +306 -0
  68. package/dist/es/location.js.map +1 -0
  69. package/dist/es/modern.d.ts +18 -0
  70. package/dist/es/modern.js +64 -0
  71. package/dist/es/modern.js.map +1 -0
  72. package/dist/es/molad.d.ts +62 -0
  73. package/dist/es/molad.js +141 -0
  74. package/dist/es/molad.js.map +1 -0
  75. package/dist/es/omer.d.ts +37 -0
  76. package/dist/es/omer.js +88 -0
  77. package/dist/es/omer.js.map +1 -0
  78. package/dist/es/parshaName.d.ts +3 -0
  79. package/dist/es/parshaName.js +19 -0
  80. package/dist/es/parshaName.js.map +1 -0
  81. package/dist/es/pkgVersion.d.ts +2 -0
  82. package/dist/es/pkgVersion.js +6 -0
  83. package/dist/es/pkgVersion.js.map +1 -0
  84. package/dist/es/reformatTimeStr.d.ts +8 -0
  85. package/dist/es/reformatTimeStr.js +52 -0
  86. package/dist/es/reformatTimeStr.js.map +1 -0
  87. package/dist/es/sedra.d.ts +107 -0
  88. package/dist/es/sedra.js +494 -0
  89. package/dist/es/sedra.js.map +1 -0
  90. package/dist/es/staticHolidays.d.ts +176 -0
  91. package/dist/es/staticHolidays.js +626 -0
  92. package/dist/es/staticHolidays.js.map +1 -0
  93. package/dist/es/tachanun.d.ts +29 -0
  94. package/dist/es/tachanun.js +125 -0
  95. package/dist/es/tachanun.js.map +1 -0
  96. package/dist/es/zmanim.d.ts +341 -0
  97. package/dist/es/zmanim.js +573 -0
  98. package/dist/es/zmanim.js.map +1 -0
  99. package/dist/event.d.ts +1 -0
  100. package/dist/holidays.d.ts +13 -0
  101. package/dist/index.cjs +2762 -10041
  102. package/dist/index.cjs.map +1 -1
  103. package/dist/index.d.ts +3 -2
  104. package/dist/module.d.ts +101 -80
  105. package/dist/pkgVersion.d.ts +1 -1
  106. package/dist/sedra.d.ts +4 -4
  107. package/dist/tachanun.d.ts +17 -1
  108. package/package.json +18 -6
  109. package/dist/index.mjs +0 -11998
  110. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,494 @@
1
+ /*! @hebcal/core v5.7.1 */
2
+ import { HDate, months } from '@hebcal/hdate';
3
+ import { renderParshaName } from './parshaName.js';
4
+ import QuickLRU from 'quick-lru';
5
+ import './locale.js';
6
+
7
+ /*
8
+ Hebcal - A Jewish Calendar Generator
9
+ Copyright (c) 1994-2020 Danny Sadinoff
10
+ Portions copyright Eyal Schachter and Michael J. Radwin
11
+
12
+ https://github.com/hebcal/hebcal-es6
13
+
14
+ This program is free software; you can redistribute it and/or
15
+ modify it under the terms of the GNU General Public License
16
+ as published by the Free Software Foundation; either version 2
17
+ of the License, or (at your option) any later version.
18
+
19
+ This program is distributed in the hope that it will be useful,
20
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ GNU General Public License for more details.
23
+
24
+ You should have received a copy of the GNU General Public License
25
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
26
+ */
27
+ /*
28
+ * Many of the following algorithms were taken from hebrew calendar
29
+ * routines by Maimonedes, from his Mishneh Torah, and implemented by
30
+ * Nachum Dershowitz Department of Computer Science
31
+ * (217) 333-4219 University of Illinois at Urbana-Champaign
32
+ * nachum@cs.uiuedu 1304 West Springfield Avenue
33
+ * Urbana, Illinois 61801
34
+ *
35
+ * The routines were included in the emacs 19 distribution.
36
+ *
37
+ */
38
+ const INCOMPLETE = 0;
39
+ const REGULAR = 1;
40
+ const COMPLETE = 2;
41
+ function yearType(hyear) {
42
+ const longC = HDate.longCheshvan(hyear);
43
+ const shortK = HDate.shortKislev(hyear);
44
+ if (longC && !shortK) {
45
+ return COMPLETE;
46
+ }
47
+ else if (!longC && shortK) {
48
+ return INCOMPLETE;
49
+ }
50
+ else {
51
+ return REGULAR;
52
+ }
53
+ }
54
+ /**
55
+ * Represents Parashah HaShavua for an entire Hebrew year
56
+ */
57
+ class Sedra {
58
+ /**
59
+ * Caculates the Parashah HaShavua for an entire Hebrew year
60
+ * @param hyear - Hebrew year (e.g. 5749)
61
+ * @param il - Use Israel sedra schedule (false for Diaspora)
62
+ */
63
+ constructor(hyear, il) {
64
+ hyear = +hyear;
65
+ this.year = hyear;
66
+ const rh0 = new HDate(1, months.TISHREI, hyear);
67
+ const rh = rh0.abs();
68
+ const rhDay = rh0.getDay() + 1;
69
+ // find the first Saturday on or after Rosh Hashana
70
+ this.firstSaturday = HDate.dayOnOrBefore(6, rh + 6);
71
+ const leap = +HDate.isLeapYear(hyear);
72
+ this.il = Boolean(il);
73
+ const type = yearType(hyear);
74
+ let key = `${leap}${rhDay}${type}`;
75
+ if (types[key]) {
76
+ this.theSedraArray = types[key];
77
+ }
78
+ else {
79
+ key = key + +this.il; // cast to num, then concat
80
+ this.theSedraArray = types[key];
81
+ }
82
+ if (!this.theSedraArray) {
83
+ throw new Error(`improper sedra year type ${key} calculated for ${hyear}`);
84
+ }
85
+ }
86
+ /**
87
+ * Returns the parsha (or parshiyot) read on Hebrew date
88
+ * @deprecated Use {@link lookup} instead
89
+ * @param hd Hebrew date or R.D. days
90
+ */
91
+ get(hd) {
92
+ return this.lookup(hd).parsha;
93
+ }
94
+ /**
95
+ * Looks up parsha for the date, then returns a translated or transliterated string
96
+ * @deprecated Use {@link lookup} instead
97
+ * @param hd Hebrew date or R.D. days
98
+ * @param [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale
99
+ */
100
+ getString(hd, locale) {
101
+ const parsha = this.get(hd);
102
+ return renderParshaName(parsha, locale);
103
+ }
104
+ /**
105
+ * Checks to see if this day would be a regular parasha HaShavua
106
+ * Torah reading or special holiday reading
107
+ * @deprecated Use {@link lookup} instead
108
+ * @param hd Hebrew date or R.D. days
109
+ */
110
+ isParsha(hd) {
111
+ return !this.lookup(hd).chag;
112
+ }
113
+ /**
114
+ * Returns the date that a parsha occurs
115
+ * or `null` if the parsha doesn't occur this year
116
+ * @param parsha if a `string`, specified with Sephardic transliterations
117
+ * like `'Noach'` or `'Matot-Masei'`. If an array, must be a 1- or 2-element
118
+ * array such as `['Noach']` or `['Matot', 'Masei']`. If a `number`, should
119
+ * be a 0-based parsha index (`0` for Bereshit, `1` for Noach) or a negative
120
+ * number for a doubled parsha (e.g. `-21` for Vayakhel-Pekudei)
121
+ */
122
+ find(parsha) {
123
+ if (typeof parsha === 'number') {
124
+ if (parsha >= parshiot.length || (parsha < 0 && !isValidDouble(parsha))) {
125
+ throw new RangeError(`Invalid parsha number: ${parsha}`);
126
+ }
127
+ return this.findInternal(parsha);
128
+ }
129
+ else if (typeof parsha === 'string') {
130
+ const num = parsha2id.get(parsha);
131
+ if (typeof num === 'number') {
132
+ return this.find(num);
133
+ }
134
+ else if (parsha.indexOf('-') !== -1) {
135
+ if (parsha === CHMPESACH || parsha === CHMSUKOT) {
136
+ return this.findInternal(parsha);
137
+ }
138
+ return this.find(parsha.split('-'));
139
+ }
140
+ else {
141
+ // try to find Saturday holiday like 'Yom Kippur'
142
+ return this.findInternal(parsha);
143
+ }
144
+ }
145
+ else if (Array.isArray(parsha)) {
146
+ const plen = parsha.length;
147
+ if ((plen !== 1 && plen !== 2) || typeof parsha[0] !== 'string') {
148
+ throw new TypeError(`Invalid parsha argument: ${JSON.stringify(parsha)}`);
149
+ }
150
+ if (plen === 1) {
151
+ return this.find(parsha[0]);
152
+ }
153
+ const p1 = parsha[0];
154
+ const p2 = parsha[1];
155
+ const num1 = parsha2id.get(p1);
156
+ const num2 = parsha2id.get(p2);
157
+ if (typeof num1 !== 'number' ||
158
+ typeof num2 !== 'number' ||
159
+ num2 !== num1 + 1 ||
160
+ !isValidDouble(-num1)) {
161
+ throw new RangeError(`Unrecognized parsha name: ${p1}-${p2}`);
162
+ }
163
+ return this.find(-num1);
164
+ }
165
+ return null; /* NOTREACHED */
166
+ }
167
+ findInternal(parsha) {
168
+ const idx = this.theSedraArray.indexOf(parsha);
169
+ if (idx === -1) {
170
+ return null; // doesn't occur this year
171
+ }
172
+ return new HDate(this.firstSaturday + idx * 7);
173
+ }
174
+ /**
175
+ * Returns the date that a parsha (or its doubled or undoubled counterpart)
176
+ * occurs, or `null` if the parsha doesn't occur this year
177
+ */
178
+ findContaining(parsha) {
179
+ const hdate = this.find(parsha);
180
+ if (hdate) {
181
+ return hdate;
182
+ }
183
+ if (typeof parsha === 'number') {
184
+ // a valid negative number (double parsha in a year where they are
185
+ // combined) would've been found above, and a invalid negative number
186
+ // would've thrown an error, so this parsha must be a positive number
187
+ // representing either p1 or p2
188
+ const p1 = -parsha;
189
+ if (isValidDouble(p1)) {
190
+ return this.find(p1);
191
+ }
192
+ else {
193
+ // this must be the second individual parsha of a doubled pair
194
+ // for example 29 for Kedoshim, so check for -28 for Achrei Mot-Kedoshim
195
+ return this.find(p1 + 1);
196
+ }
197
+ }
198
+ else {
199
+ const num = parsha2id.get(parsha);
200
+ if (num) {
201
+ // parsha is either the first or second individual parsha of
202
+ // a pair that is doubled this year
203
+ const p1 = -num;
204
+ if (isValidDouble(p1)) {
205
+ return this.find(p1);
206
+ }
207
+ else {
208
+ return this.find(p1 + 1);
209
+ }
210
+ }
211
+ else {
212
+ // this was indeed a doubled parsha, so return date of the first half
213
+ const [p1] = parsha.split('-');
214
+ return this.find(p1);
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * Returns the underlying annual sedra schedule.
220
+ * Used by `@hebcal/triennial`
221
+ */
222
+ getSedraArray() {
223
+ return this.theSedraArray;
224
+ }
225
+ /**
226
+ * R.D. date of the first Saturday on or after Rosh Hashana
227
+ */
228
+ getFirstSaturday() {
229
+ return this.firstSaturday;
230
+ }
231
+ getYear() {
232
+ return this.year;
233
+ }
234
+ /**
235
+ * Returns an object describing the parsha on the first Saturday on or after `hd`
236
+ * @param hd Hebrew date or R.D. days
237
+ */
238
+ lookup(hd) {
239
+ const abs = typeof hd === 'number' ? hd : HDate.isHDate(hd) ? hd.abs() : NaN;
240
+ if (isNaN(abs)) {
241
+ throw new TypeError(`Bad date argument: ${hd}`);
242
+ }
243
+ // find the first saturday on or after today's date
244
+ const saturday = HDate.dayOnOrBefore(6, abs + 6);
245
+ const weekNum = (saturday - this.firstSaturday) / 7;
246
+ const index = this.theSedraArray[weekNum];
247
+ if (typeof index === 'undefined') {
248
+ const sedra = getSedra(this.year + 1, this.il);
249
+ return sedra.lookup(saturday); // must be next year
250
+ }
251
+ const hdate = new HDate(saturday);
252
+ if (typeof index === 'string') {
253
+ // Shabbat has a chag. Return a description
254
+ return { parsha: [index], chag: true, hdate };
255
+ }
256
+ if (index >= 0) {
257
+ return { parsha: [parshiot[index]], chag: false, num: index + 1, hdate };
258
+ }
259
+ const p1 = D(index); // undouble the parsha
260
+ return {
261
+ parsha: [parshiot[p1], parshiot[p1 + 1]],
262
+ chag: false,
263
+ num: [p1 + 1, p1 + 2],
264
+ hdate,
265
+ };
266
+ }
267
+ }
268
+ /**
269
+ * The 54 parshiyot of the Torah as transilterated strings.
270
+ * parshiot[0] == 'Bereshit', parshiot[1] == 'Noach', parshiot[52] == "Ha'azinu".
271
+ * @readonly
272
+ * @type {string[]}
273
+ */
274
+ const parshiot = [
275
+ 'Bereshit',
276
+ 'Noach',
277
+ 'Lech-Lecha',
278
+ 'Vayera',
279
+ 'Chayei Sara',
280
+ 'Toldot',
281
+ 'Vayetzei',
282
+ 'Vayishlach',
283
+ 'Vayeshev',
284
+ 'Miketz',
285
+ 'Vayigash',
286
+ 'Vayechi',
287
+ 'Shemot',
288
+ 'Vaera',
289
+ 'Bo',
290
+ 'Beshalach',
291
+ 'Yitro',
292
+ 'Mishpatim',
293
+ 'Terumah',
294
+ 'Tetzaveh',
295
+ 'Ki Tisa',
296
+ 'Vayakhel',
297
+ 'Pekudei',
298
+ 'Vayikra',
299
+ 'Tzav',
300
+ 'Shmini',
301
+ 'Tazria',
302
+ 'Metzora',
303
+ 'Achrei Mot',
304
+ 'Kedoshim',
305
+ 'Emor',
306
+ 'Behar',
307
+ 'Bechukotai',
308
+ 'Bamidbar',
309
+ 'Nasso',
310
+ "Beha'alotcha",
311
+ "Sh'lach",
312
+ 'Korach',
313
+ 'Chukat',
314
+ 'Balak',
315
+ 'Pinchas',
316
+ 'Matot',
317
+ 'Masei',
318
+ 'Devarim',
319
+ 'Vaetchanan',
320
+ 'Eikev',
321
+ "Re'eh",
322
+ 'Shoftim',
323
+ 'Ki Teitzei',
324
+ 'Ki Tavo',
325
+ 'Nitzavim',
326
+ 'Vayeilech',
327
+ "Ha'azinu",
328
+ ];
329
+ // 0-based parsha IDs
330
+ const parsha2id = new Map();
331
+ for (let id = 0; id < parshiot.length; id++) {
332
+ const name = parshiot[id];
333
+ parsha2id.set(name, id);
334
+ }
335
+ // 0-based parsha IDs
336
+ const doubles = [
337
+ 21, // Vayakhel-Pekudei
338
+ 26, // Tazria-Metzora
339
+ 28, // Achrei Mot-Kedoshim
340
+ 31, // Behar-Bechukotai
341
+ 38, // Chukat-Balak
342
+ 41, // Matot-Masei
343
+ 50, // Nitzavim-Vayeilech
344
+ ];
345
+ /**
346
+ * @private
347
+ * @param id a negative number
348
+ */
349
+ function isValidDouble(id) {
350
+ return doubles.includes(-id);
351
+ }
352
+ /**
353
+ * parsha doubler/undoubler
354
+ * @private
355
+ * @param p
356
+ */
357
+ function D(p) {
358
+ return -p;
359
+ }
360
+ const RH = 'Rosh Hashana'; // 0
361
+ const YK = 'Yom Kippur'; // 1
362
+ const SUKKOT = 'Sukkot'; // 0
363
+ const CHMSUKOT = 'Sukkot Shabbat Chol ha-Moed'; // 0
364
+ const SHMINI = 'Shmini Atzeret'; // 0
365
+ const PESACH = 'Pesach'; // 25
366
+ const PESACH1 = 'Pesach I';
367
+ const CHMPESACH = 'Pesach Shabbat Chol ha-Moed'; // 25
368
+ const PESACH7 = 'Pesach VII'; // 25
369
+ const PESACH8 = 'Pesach VIII';
370
+ const SHAVUOT = 'Shavuot'; // 33
371
+ /**
372
+ * Returns an array from start to end
373
+ * @private
374
+ * @param start beginning number, inclusive
375
+ * @param stop ending number, inclusive
376
+ */
377
+ function range(start, stop) {
378
+ return Array.from({ length: stop - start + 1 }, (v, k) => k + start);
379
+ }
380
+ const yearStartVayeilech = [51, 52, CHMSUKOT];
381
+ const yearStartHaazinu = [52, YK, CHMSUKOT];
382
+ const yearStartRH = [RH, 52, SUKKOT, SHMINI];
383
+ const r020 = range(0, 20);
384
+ const r027 = range(0, 27);
385
+ const r3340 = range(33, 40);
386
+ const r4349 = range(43, 49);
387
+ const r4350 = range(43, 50);
388
+ /**
389
+ * The ordinary year types (keviot)
390
+ * names are leap/nonleap - day - incomplete/regular/complete - diaspora/Israel
391
+ * @private
392
+ * @readonly
393
+ */
394
+ const types = {
395
+ /* Hebrew year that starts on Monday, is `incomplete' (Heshvan and
396
+ * Kislev each have 29 days), and has Passover start on Tuesday. */
397
+ // e.g. 5753
398
+ '020': yearStartVayeilech.concat(r020, D(21), 23, 24, PESACH, 25, D(26), D(28), 30, D(31), r3340, D(41), r4349, D(50)),
399
+ /* Hebrew year that starts on Monday, is `complete' (Heshvan and
400
+ * Kislev each have 30 days), and has Passover start on Thursday. */
401
+ // e.g. 5756
402
+ '0220': yearStartVayeilech.concat(r020, D(21), 23, 24, PESACH, 25, D(26), D(28), 30, D(31), 33, SHAVUOT, range(34, 37), D(38), 40, D(41), r4349, D(50)),
403
+ /* Hebrew year that starts on Thursday, is `regular' (Heshvan has 29
404
+ * days and Kislev has 30 days), and has Passover start on Saturday. */
405
+ // e.g. 5701
406
+ '0510': yearStartHaazinu.concat(r020, D(21), 23, 24, PESACH1, PESACH8, 25, D(26), D(28), 30, D(31), r3340, D(41), r4350),
407
+ /* Hebrew year that starts on Thursday, is `regular' (Heshvan has 29
408
+ * days and Kislev has 30 days), and has Passover start on Saturday. */
409
+ // e.g. 5745
410
+ '0511': yearStartHaazinu.concat(r020, D(21), 23, 24, PESACH, 25, D(26), D(28), range(30, 40), D(41), r4350),
411
+ /* Hebrew year that starts on Thursday, is `complete' (Heshvan and
412
+ * Kislev each have 30 days), and has Passover start on Sunday. */
413
+ // e.g. 5754
414
+ '052': yearStartHaazinu.concat(range(0, 24), PESACH7, 25, D(26), D(28), 30, D(31), r3340, D(41), r4350),
415
+ /* Hebrew year that starts on Saturday, is `incomplete' (Heshvan and Kislev
416
+ * each have 29 days), and has Passover start on Sunday. */
417
+ // e.g. 5761
418
+ '070': yearStartRH.concat(r020, D(21), 23, 24, PESACH7, 25, D(26), D(28), 30, D(31), r3340, D(41), r4350),
419
+ /* Hebrew year that starts on Saturday, is `complete' (Heshvan and
420
+ * Kislev each have 30 days), and has Passover start on Tuesday. */
421
+ // e.g. 5716
422
+ '072': yearStartRH.concat(r020, D(21), 23, 24, CHMPESACH, 25, D(26), D(28), 30, D(31), r3340, D(41), r4349, D(50)),
423
+ /* -- The leap year types (keviot) -- */
424
+ /* Hebrew year that starts on Monday, is `incomplete' (Heshvan and
425
+ * Kislev each have 29 days), and has Passover start on Thursday. */
426
+ // e.g. 5746
427
+ '1200': yearStartVayeilech.concat(r027, CHMPESACH, range(28, 33), SHAVUOT, range(34, 37), D(38), 40, D(41), r4349, D(50)),
428
+ /* Hebrew year that starts on Monday, is `incomplete' (Heshvan and
429
+ * Kislev each have 29 days), and has Passover start on Thursday. */
430
+ // e.g. 5746
431
+ '1201': yearStartVayeilech.concat(r027, CHMPESACH, range(28, 40), D(41), r4349, D(50)),
432
+ /* Hebrew year that starts on Monday, is `complete' (Heshvan and
433
+ * Kislev each have 30 days), and has Passover start on Saturday. */
434
+ // e.g.5752
435
+ '1220': yearStartVayeilech.concat(r027, PESACH1, PESACH8, range(28, 40), D(41), r4350),
436
+ /* Hebrew year that starts on Monday, is `complete' (Heshvan and
437
+ * Kislev each have 30 days), and has Passover start on Saturday. */
438
+ // e.g.5752
439
+ '1221': yearStartVayeilech.concat(r027, PESACH, range(28, 50)),
440
+ /* Hebrew year that starts on Thursday, is `incomplete' (Heshvan and
441
+ * Kislev both have 29 days), and has Passover start on Sunday. */
442
+ // e.g. 5768
443
+ '150': yearStartHaazinu.concat(range(0, 28), PESACH7, range(29, 50)),
444
+ /* Hebrew year that starts on Thursday, is `complete' (Heshvan and
445
+ * Kislev both have 30 days), and has Passover start on Tuesday. */
446
+ // eg. 5771
447
+ '152': yearStartHaazinu.concat(range(0, 28), CHMPESACH, range(29, 49), D(50)),
448
+ /* Hebrew year that starts on Saturday, is `incomplete' (Heshvan and
449
+ * Kislev each have 29 days), and has Passover start on Tuesday. */
450
+ // e.g.5757
451
+ '170': yearStartRH.concat(r027, CHMPESACH, range(28, 40), D(41), r4349, D(50)),
452
+ /* Hebrew year that starts on Saturday, is `complete' (Heshvan and
453
+ * Kislev each have 30 days), and has Passover start on Thursday. */
454
+ '1720': yearStartRH.concat(r027, CHMPESACH, range(28, 33), SHAVUOT, range(34, 37), D(38), 40, D(41), r4349, D(50)),
455
+ };
456
+ /* Hebrew year that starts on Monday, is `complete' (Heshvan and
457
+ * Kislev each have 30 days), and has Passover start on Thursday. */
458
+ types['0221'] = types['020'];
459
+ /* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29
460
+ * days and Kislev has 30 days), and has Passover start on Thursday. */
461
+ // e.g. 5715
462
+ types['0310'] = types['0220'];
463
+ /* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29
464
+ * days and Kislev has 30 days), and has Passover start on Thursday. */
465
+ types['0311'] = types['020'];
466
+ /* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29
467
+ * days and Kislev has 30 days), and has Passover start on Saturday. */
468
+ // e.g. 5715
469
+ types['1310'] = types['1220'];
470
+ /* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29
471
+ * days and Kislev has 30 days), and has Passover start on Saturday. */
472
+ types['1311'] = types['1221'];
473
+ /* Hebrew year that starts on Saturday, is `complete' (Heshvan and
474
+ * Kislev each have 30 days), and has Passover start on Thursday. */
475
+ types['1721'] = types['170'];
476
+ const sedraCache = new QuickLRU({ maxSize: 400 });
477
+ /**
478
+ * Convenience function to create an instance of `Sedra` or reuse a previously
479
+ * created and cached instance.
480
+ * @param hyear
481
+ * @param il
482
+ */
483
+ function getSedra(hyear, il) {
484
+ const cacheKey = `${hyear}-${il ? 1 : 0}`;
485
+ let sedra = sedraCache.get(cacheKey);
486
+ if (!sedra) {
487
+ sedra = new Sedra(hyear, il);
488
+ sedraCache.set(cacheKey, sedra);
489
+ }
490
+ return sedra;
491
+ }
492
+
493
+ export { Sedra, getSedra, parshiot };
494
+ //# sourceMappingURL=sedra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sedra.js","sources":["../../../src/sedra.ts"],"sourcesContent":["/*\n Hebcal - A Jewish Calendar Generator\n Copyright (c) 1994-2020 Danny Sadinoff\n Portions copyright Eyal Schachter and Michael J. Radwin\n\n https://github.com/hebcal/hebcal-es6\n\n This program is free software; you can redistribute it and/or\n modify it under the terms of the GNU General Public License\n as published by the Free Software Foundation; either version 2\n of the License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Many of the following algorithms were taken from hebrew calendar\n * routines by Maimonedes, from his Mishneh Torah, and implemented by\n * Nachum Dershowitz Department of Computer Science\n * (217) 333-4219 University of Illinois at Urbana-Champaign\n * nachum@cs.uiuedu 1304 West Springfield Avenue\n * Urbana, Illinois 61801\n *\n * The routines were included in the emacs 19 distribution.\n *\n */\nimport {HDate, months} from '@hebcal/hdate';\nimport {renderParshaName} from './parshaName';\nimport QuickLRU from 'quick-lru';\nimport './locale'; // Adds Hebrew and Ashkenazic translations\n\nconst INCOMPLETE = 0;\nconst REGULAR = 1;\nconst COMPLETE = 2;\n\nfunction yearType(hyear: number): number {\n const longC = HDate.longCheshvan(hyear);\n const shortK = HDate.shortKislev(hyear);\n if (longC && !shortK) {\n return COMPLETE;\n } else if (!longC && shortK) {\n return INCOMPLETE;\n } else {\n return REGULAR;\n }\n}\n\n/** The result from `Sedra.lookup()` */\nexport type SedraResult = {\n /**\n * Name of the parsha (or parshiyot) read on\n * Hebrew date, e.g. `['Noach']` or `['Matot', 'Masei']`\n */\n parsha: string[];\n /**\n * True if this is a regular parasha HaShavua\n * Torah reading, false if it's a special holiday reading\n */\n chag: boolean;\n /**\n * The parsha number (or numbers) using 1-indexing.\n * A `number` for a regular (single) parsha, and a `number[]`\n * for a doubled parsha.\n * For Parashat *Bereshit*, `num` would be equal to `1`, and for\n * *Matot-Masei* it would be `[42, 43]`\n */\n num?: number | number[];\n /** The date of the Shabbat this parsha is read */\n hdate: HDate;\n};\n\n/**\n * Represents Parashah HaShavua for an entire Hebrew year\n */\nexport class Sedra {\n private readonly year: number;\n private readonly il: boolean;\n private readonly firstSaturday: number;\n private readonly theSedraArray: readonly NumberOrString[];\n /**\n * Caculates the Parashah HaShavua for an entire Hebrew year\n * @param hyear - Hebrew year (e.g. 5749)\n * @param il - Use Israel sedra schedule (false for Diaspora)\n */\n constructor(hyear: number, il: boolean) {\n hyear = +hyear;\n this.year = hyear;\n\n const rh0 = new HDate(1, months.TISHREI, hyear);\n const rh = rh0.abs();\n const rhDay = rh0.getDay() + 1;\n\n // find the first Saturday on or after Rosh Hashana\n this.firstSaturday = HDate.dayOnOrBefore(6, rh + 6);\n const leap = +HDate.isLeapYear(hyear);\n this.il = Boolean(il);\n\n const type = yearType(hyear);\n let key = `${leap}${rhDay}${type}`;\n if (types[key]) {\n this.theSedraArray = types[key];\n } else {\n key = key + +this.il; // cast to num, then concat\n this.theSedraArray = types[key];\n }\n\n if (!this.theSedraArray) {\n throw new Error(\n `improper sedra year type ${key} calculated for ${hyear}`\n );\n }\n }\n\n /**\n * Returns the parsha (or parshiyot) read on Hebrew date\n * @deprecated Use {@link lookup} instead\n * @param hd Hebrew date or R.D. days\n */\n get(hd: HDate | number): string[] {\n return this.lookup(hd).parsha;\n }\n\n /**\n * Looks up parsha for the date, then returns a translated or transliterated string\n * @deprecated Use {@link lookup} instead\n * @param hd Hebrew date or R.D. days\n * @param [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to active locale\n */\n getString(hd: HDate | number, locale?: string): string {\n const parsha = this.get(hd);\n return renderParshaName(parsha, locale);\n }\n\n /**\n * Checks to see if this day would be a regular parasha HaShavua\n * Torah reading or special holiday reading\n * @deprecated Use {@link lookup} instead\n * @param hd Hebrew date or R.D. days\n */\n isParsha(hd: HDate | number): boolean {\n return !this.lookup(hd).chag;\n }\n\n /**\n * Returns the date that a parsha occurs\n * or `null` if the parsha doesn't occur this year\n * @param parsha if a `string`, specified with Sephardic transliterations\n * like `'Noach'` or `'Matot-Masei'`. If an array, must be a 1- or 2-element\n * array such as `['Noach']` or `['Matot', 'Masei']`. If a `number`, should\n * be a 0-based parsha index (`0` for Bereshit, `1` for Noach) or a negative\n * number for a doubled parsha (e.g. `-21` for Vayakhel-Pekudei)\n */\n find(parsha: number | string | string[]): HDate | null {\n if (typeof parsha === 'number') {\n if (parsha >= parshiot.length || (parsha < 0 && !isValidDouble(parsha))) {\n throw new RangeError(`Invalid parsha number: ${parsha}`);\n }\n return this.findInternal(parsha);\n } else if (typeof parsha === 'string') {\n const num = parsha2id.get(parsha);\n if (typeof num === 'number') {\n return this.find(num);\n } else if (parsha.indexOf('-') !== -1) {\n if (parsha === CHMPESACH || parsha === CHMSUKOT) {\n return this.findInternal(parsha);\n }\n return this.find(parsha.split('-'));\n } else {\n // try to find Saturday holiday like 'Yom Kippur'\n return this.findInternal(parsha);\n }\n } else if (Array.isArray(parsha)) {\n const plen = parsha.length;\n if ((plen !== 1 && plen !== 2) || typeof parsha[0] !== 'string') {\n throw new TypeError(\n `Invalid parsha argument: ${JSON.stringify(parsha)}`\n );\n }\n if (plen === 1) {\n return this.find(parsha[0]);\n }\n const p1 = parsha[0];\n const p2 = parsha[1];\n const num1 = parsha2id.get(p1);\n const num2 = parsha2id.get(p2);\n if (\n typeof num1 !== 'number' ||\n typeof num2 !== 'number' ||\n num2 !== num1 + 1 ||\n !isValidDouble(-num1)\n ) {\n throw new RangeError(`Unrecognized parsha name: ${p1}-${p2}`);\n }\n return this.find(-num1);\n }\n return null; /* NOTREACHED */\n }\n\n private findInternal(parsha: NumberOrString): HDate | null {\n const idx = this.theSedraArray.indexOf(parsha);\n if (idx === -1) {\n return null; // doesn't occur this year\n }\n return new HDate(this.firstSaturday + idx * 7);\n }\n\n /**\n * Returns the date that a parsha (or its doubled or undoubled counterpart)\n * occurs, or `null` if the parsha doesn't occur this year\n */\n findContaining(parsha: number | string): HDate | null {\n const hdate = this.find(parsha);\n if (hdate) {\n return hdate;\n }\n if (typeof parsha === 'number') {\n // a valid negative number (double parsha in a year where they are\n // combined) would've been found above, and a invalid negative number\n // would've thrown an error, so this parsha must be a positive number\n // representing either p1 or p2\n const p1 = -parsha;\n if (isValidDouble(p1)) {\n return this.find(p1);\n } else {\n // this must be the second individual parsha of a doubled pair\n // for example 29 for Kedoshim, so check for -28 for Achrei Mot-Kedoshim\n return this.find(p1 + 1);\n }\n } else {\n const num = parsha2id.get(parsha);\n if (num) {\n // parsha is either the first or second individual parsha of\n // a pair that is doubled this year\n const p1 = -num;\n if (isValidDouble(p1)) {\n return this.find(p1);\n } else {\n return this.find(p1 + 1);\n }\n } else {\n // this was indeed a doubled parsha, so return date of the first half\n const [p1] = parsha.split('-');\n return this.find(p1);\n }\n }\n }\n\n /**\n * Returns the underlying annual sedra schedule.\n * Used by `@hebcal/triennial`\n */\n getSedraArray(): readonly NumberOrString[] {\n return this.theSedraArray;\n }\n\n /**\n * R.D. date of the first Saturday on or after Rosh Hashana\n */\n getFirstSaturday(): number {\n return this.firstSaturday;\n }\n\n getYear(): number {\n return this.year;\n }\n\n /**\n * Returns an object describing the parsha on the first Saturday on or after `hd`\n * @param hd Hebrew date or R.D. days\n */\n lookup(hd: HDate | number): SedraResult {\n const abs =\n typeof hd === 'number' ? hd : HDate.isHDate(hd) ? hd.abs() : NaN;\n\n if (isNaN(abs)) {\n throw new TypeError(`Bad date argument: ${hd}`);\n }\n\n // find the first saturday on or after today's date\n const saturday = HDate.dayOnOrBefore(6, abs + 6);\n\n const weekNum = (saturday - this.firstSaturday) / 7;\n const index = this.theSedraArray[weekNum];\n\n if (typeof index === 'undefined') {\n const sedra = getSedra(this.year + 1, this.il);\n return sedra.lookup(saturday); // must be next year\n }\n const hdate = new HDate(saturday);\n if (typeof index === 'string') {\n // Shabbat has a chag. Return a description\n return {parsha: [index], chag: true, hdate};\n }\n if (index >= 0) {\n return {parsha: [parshiot[index]], chag: false, num: index + 1, hdate};\n }\n\n const p1 = D(index); // undouble the parsha\n return {\n parsha: [parshiot[p1], parshiot[p1 + 1]],\n chag: false,\n num: [p1 + 1, p1 + 2],\n hdate,\n };\n }\n}\n\n/**\n * The 54 parshiyot of the Torah as transilterated strings.\n * parshiot[0] == 'Bereshit', parshiot[1] == 'Noach', parshiot[52] == \"Ha'azinu\".\n * @readonly\n * @type {string[]}\n */\nexport const parshiot: readonly string[] = [\n 'Bereshit',\n 'Noach',\n 'Lech-Lecha',\n 'Vayera',\n 'Chayei Sara',\n 'Toldot',\n 'Vayetzei',\n 'Vayishlach',\n 'Vayeshev',\n 'Miketz',\n 'Vayigash',\n 'Vayechi',\n 'Shemot',\n 'Vaera',\n 'Bo',\n 'Beshalach',\n 'Yitro',\n 'Mishpatim',\n 'Terumah',\n 'Tetzaveh',\n 'Ki Tisa',\n 'Vayakhel',\n 'Pekudei',\n 'Vayikra',\n 'Tzav',\n 'Shmini',\n 'Tazria',\n 'Metzora',\n 'Achrei Mot',\n 'Kedoshim',\n 'Emor',\n 'Behar',\n 'Bechukotai',\n 'Bamidbar',\n 'Nasso',\n \"Beha'alotcha\",\n \"Sh'lach\",\n 'Korach',\n 'Chukat',\n 'Balak',\n 'Pinchas',\n 'Matot',\n 'Masei',\n 'Devarim',\n 'Vaetchanan',\n 'Eikev',\n \"Re'eh\",\n 'Shoftim',\n 'Ki Teitzei',\n 'Ki Tavo',\n 'Nitzavim',\n 'Vayeilech',\n \"Ha'azinu\",\n] as const;\n\n// 0-based parsha IDs\nconst parsha2id = new Map<string, number>();\nfor (let id = 0; id < parshiot.length; id++) {\n const name = parshiot[id];\n parsha2id.set(name, id);\n}\n\n// 0-based parsha IDs\nconst doubles = [\n 21, // Vayakhel-Pekudei\n 26, // Tazria-Metzora\n 28, // Achrei Mot-Kedoshim\n 31, // Behar-Bechukotai\n 38, // Chukat-Balak\n 41, // Matot-Masei\n 50, // Nitzavim-Vayeilech\n];\n\n/**\n * @private\n * @param id a negative number\n */\nfunction isValidDouble(id: number): boolean {\n return doubles.includes(-id);\n}\n\n/**\n * parsha doubler/undoubler\n * @private\n * @param p\n */\nfunction D(p: number): number {\n return -p;\n}\n\nconst RH = 'Rosh Hashana'; // 0\nconst YK = 'Yom Kippur'; // 1\n\nconst SUKKOT = 'Sukkot'; // 0\nconst CHMSUKOT = 'Sukkot Shabbat Chol ha-Moed'; // 0\nconst SHMINI = 'Shmini Atzeret'; // 0\n\nconst PESACH = 'Pesach'; // 25\nconst PESACH1 = 'Pesach I';\nconst CHMPESACH = 'Pesach Shabbat Chol ha-Moed'; // 25\nconst PESACH7 = 'Pesach VII'; // 25\nconst PESACH8 = 'Pesach VIII';\nconst SHAVUOT = 'Shavuot'; // 33\n\n/**\n * Returns an array from start to end\n * @private\n * @param start beginning number, inclusive\n * @param stop ending number, inclusive\n */\nfunction range(start: number, stop: number): readonly number[] {\n return Array.from({length: stop - start + 1}, (v, k) => k + start);\n}\n\ntype NumberOrString = number | string;\n\nconst yearStartVayeilech: readonly NumberOrString[] = [51, 52, CHMSUKOT];\nconst yearStartHaazinu: readonly NumberOrString[] = [52, YK, CHMSUKOT];\nconst yearStartRH: readonly NumberOrString[] = [RH, 52, SUKKOT, SHMINI];\nconst r020 = range(0, 20);\nconst r027 = range(0, 27);\nconst r3340 = range(33, 40);\nconst r4349 = range(43, 49);\nconst r4350 = range(43, 50);\n\n/**\n * The ordinary year types (keviot)\n * names are leap/nonleap - day - incomplete/regular/complete - diaspora/Israel\n * @private\n * @readonly\n */\nconst types: {[s: string]: readonly NumberOrString[]} = {\n /* Hebrew year that starts on Monday, is `incomplete' (Heshvan and\n * Kislev each have 29 days), and has Passover start on Tuesday. */\n // e.g. 5753\n '020': yearStartVayeilech.concat(\n r020,\n D(21),\n 23,\n 24,\n PESACH,\n 25,\n D(26),\n D(28),\n 30,\n D(31),\n r3340,\n D(41),\n r4349,\n D(50)\n ),\n\n /* Hebrew year that starts on Monday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Thursday. */\n // e.g. 5756\n '0220': yearStartVayeilech.concat(\n r020,\n D(21),\n 23,\n 24,\n PESACH,\n 25,\n D(26),\n D(28),\n 30,\n D(31),\n 33,\n SHAVUOT,\n range(34, 37),\n D(38),\n 40,\n D(41),\n r4349,\n D(50)\n ),\n\n /* Hebrew year that starts on Thursday, is `regular' (Heshvan has 29\n * days and Kislev has 30 days), and has Passover start on Saturday. */\n // e.g. 5701\n '0510': yearStartHaazinu.concat(\n r020,\n D(21),\n 23,\n 24,\n PESACH1,\n PESACH8,\n 25,\n D(26),\n D(28),\n 30,\n D(31),\n r3340,\n D(41),\n r4350\n ),\n\n /* Hebrew year that starts on Thursday, is `regular' (Heshvan has 29\n * days and Kislev has 30 days), and has Passover start on Saturday. */\n // e.g. 5745\n '0511': yearStartHaazinu.concat(\n r020,\n D(21),\n 23,\n 24,\n PESACH,\n 25,\n D(26),\n D(28),\n range(30, 40),\n D(41),\n r4350\n ),\n\n /* Hebrew year that starts on Thursday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Sunday. */\n // e.g. 5754\n '052': yearStartHaazinu.concat(\n range(0, 24),\n PESACH7,\n 25,\n D(26),\n D(28),\n 30,\n D(31),\n r3340,\n D(41),\n r4350\n ),\n\n /* Hebrew year that starts on Saturday, is `incomplete' (Heshvan and Kislev\n * each have 29 days), and has Passover start on Sunday. */\n // e.g. 5761\n '070': yearStartRH.concat(\n r020,\n D(21),\n 23,\n 24,\n PESACH7,\n 25,\n D(26),\n D(28),\n 30,\n D(31),\n r3340,\n D(41),\n r4350\n ),\n\n /* Hebrew year that starts on Saturday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Tuesday. */\n // e.g. 5716\n '072': yearStartRH.concat(\n r020,\n D(21),\n 23,\n 24,\n CHMPESACH,\n 25,\n D(26),\n D(28),\n 30,\n D(31),\n r3340,\n D(41),\n r4349,\n D(50)\n ),\n\n /* -- The leap year types (keviot) -- */\n /* Hebrew year that starts on Monday, is `incomplete' (Heshvan and\n * Kislev each have 29 days), and has Passover start on Thursday. */\n // e.g. 5746\n '1200': yearStartVayeilech.concat(\n r027,\n CHMPESACH,\n range(28, 33),\n SHAVUOT,\n range(34, 37),\n D(38),\n 40,\n D(41),\n r4349,\n D(50)\n ),\n\n /* Hebrew year that starts on Monday, is `incomplete' (Heshvan and\n * Kislev each have 29 days), and has Passover start on Thursday. */\n // e.g. 5746\n '1201': yearStartVayeilech.concat(\n r027,\n CHMPESACH,\n range(28, 40),\n D(41),\n r4349,\n D(50)\n ),\n\n /* Hebrew year that starts on Monday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Saturday. */\n // e.g.5752\n '1220': yearStartVayeilech.concat(\n r027,\n PESACH1,\n PESACH8,\n range(28, 40),\n D(41),\n r4350\n ),\n\n /* Hebrew year that starts on Monday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Saturday. */\n // e.g.5752\n '1221': yearStartVayeilech.concat(r027, PESACH, range(28, 50)),\n\n /* Hebrew year that starts on Thursday, is `incomplete' (Heshvan and\n * Kislev both have 29 days), and has Passover start on Sunday. */\n // e.g. 5768\n '150': yearStartHaazinu.concat(range(0, 28), PESACH7, range(29, 50)),\n\n /* Hebrew year that starts on Thursday, is `complete' (Heshvan and\n * Kislev both have 30 days), and has Passover start on Tuesday. */\n // eg. 5771\n '152': yearStartHaazinu.concat(range(0, 28), CHMPESACH, range(29, 49), D(50)),\n\n /* Hebrew year that starts on Saturday, is `incomplete' (Heshvan and\n * Kislev each have 29 days), and has Passover start on Tuesday. */\n // e.g.5757\n '170': yearStartRH.concat(\n r027,\n CHMPESACH,\n range(28, 40),\n D(41),\n r4349,\n D(50)\n ),\n\n /* Hebrew year that starts on Saturday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Thursday. */\n '1720': yearStartRH.concat(\n r027,\n CHMPESACH,\n range(28, 33),\n SHAVUOT,\n range(34, 37),\n D(38),\n 40,\n D(41),\n r4349,\n D(50)\n ),\n} as const;\n\n/* Hebrew year that starts on Monday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Thursday. */\ntypes['0221'] = types['020'];\n\n/* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29\n * days and Kislev has 30 days), and has Passover start on Thursday. */\n// e.g. 5715\ntypes['0310'] = types['0220'];\n\n/* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29\n * days and Kislev has 30 days), and has Passover start on Thursday. */\ntypes['0311'] = types['020'];\n\n/* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29\n * days and Kislev has 30 days), and has Passover start on Saturday. */\n// e.g. 5715\ntypes['1310'] = types['1220'];\n/* Hebrew year that starts on Tuesday, is `regular' (Heshvan has 29\n * days and Kislev has 30 days), and has Passover start on Saturday. */\ntypes['1311'] = types['1221'];\n\n/* Hebrew year that starts on Saturday, is `complete' (Heshvan and\n * Kislev each have 30 days), and has Passover start on Thursday. */\ntypes['1721'] = types['170'];\n\nconst sedraCache = new QuickLRU<string, Sedra>({maxSize: 400});\n\n/**\n * Convenience function to create an instance of `Sedra` or reuse a previously\n * created and cached instance.\n * @param hyear\n * @param il\n */\nexport function getSedra(hyear: number, il: boolean): Sedra {\n const cacheKey = `${hyear}-${il ? 1 : 0}`;\n let sedra = sedraCache.get(cacheKey);\n if (!sedra) {\n sedra = new Sedra(hyear, il);\n sedraCache.set(cacheKey, sedra);\n }\n return sedra;\n}\n"],"names":[],"mappings":"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"}