@hebcal/leyning 6.2.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- /*! @hebcal/leyning v6.2.3 */
2
- import { flags, months, HDate, HebrewCalendar, Event, Locale, ParshaEvent } from '@hebcal/core';
1
+ /*! @hebcal/leyning v7.0.0 */
2
+ import { flags, months, HDate, HebrewCalendar, Locale, ParshaEvent, Event } from '@hebcal/core';
3
3
 
4
4
  const Genesis=[0,31,25,24,26,32,22,24,22,29,32,32,20,18,24,21,16,27,33,38,18,34,24,20,67,34,35,46,22,35,43,54,33,20,31,29,43,36,30,23,23,57,38,34,34,28,34,31,22,33,26];const Exodus=[0,22,25,22,31,23,30,29,28,35,29,10,51,22,31,27,36,16,27,25,26,37,30,33,18,40,37,21,43,46,38,18,35,23,35,35,38,29,31,43,38];const Leviticus=[0,17,16,17,35,26,23,38,36,24,20,47,8,59,57,33,34,16,30,37,27,24,33,44,23,55,46,34];const Numbers=[0,54,34,51,49,31,27,89,26,23,36,35,16,33,45,41,35,28,32,22,29,35,41,30,25,19,65,23,31,39,17,54,42,56,29,34,13];const Deuteronomy=[0,46,37,29,49,30,25,26,20,29,22,32,31,19,29,23,22,20,22,21,20,23,29,26,22,19,19,26,69,28,20,30,52,29,12];const Joshua=[0,18,24,17,24,15,27,26,35,27,43,23,24,33,15,63,10,18,28,51,9,45,34,16,33];const Judges=[0,36,23,31,24,31,40,25,35,57,18,40,15,25,20,20,31,13,31,30,48,25];const Ruth=[0,22,23,18,22];const Isaiah=[0,31,22,26,6,30,13,25,23,20,34,16,6,22,32,9,14,14,7,25,6,17,25,18,23,12,21,13,29,24,33,9,20,24,17,10,22,38,22,8,31,29,25,28,28,25,13,15,22,26,11,23,15,12,17,13,12,21,14,21,22,11,12,19,11,25,24];const Jeremiah=[0,19,37,25,31,31,30,34,23,25,25,23,17,27,22,21,21,27,23,15,18,14,30,40,10,38,24,22,17,32,24,40,44,26,22,19,32,21,28,18,16,18,22,13,30,5,28,7,47,39,46,64,34];const Lamentations=[0,22,22,66,22,22];const Baruch=[0,22,35,38,37,9,72];const Ezekiel=[0,28,10,27,17,17,14,27,18,11,22,25,28,23,23,8,63,24,32,14,44,37,31,49,27,17,21,36,26,21,26,18,32,33,31,15,38,28,23,29,49,26,20,27,31,25,24,23,35];const Daniel=[0,21,49,100,34,30,29,28,27,27,21,45,13,64,42];const Hosea=[0,9,25,5,19,15,11,16,14,17,15,11,15,15,10];const Joel=[0,20,27,5,21];const Amos=[0,15,16,15,13,27,14,17,14,15];const Obadiah=[0,21];const Jonah=[0,16,11,10,11];const Micah=[0,16,13,12,14,14,16,20];const Nachum=[0,14,14,19];const Habakkuk=[0,17,20,19];const Zephaniah=[0,18,15,20];const Haggai=[0,15,23];const Zechariah=[0,17,17,10,14,11,15,14,23,17,12,17,14,9,21];const Malachi=[0,14,17,24];var numverses = {Genesis:Genesis,Exodus:Exodus,Leviticus:Leviticus,Numbers:Numbers,Deuteronomy:Deuteronomy,Joshua:Joshua,Judges:Judges,Ruth:Ruth,"I Samuel":[0,28,36,21,22,12,21,17,22,27,27,15,25,23,52,35,23,58,30,24,42,16,23,28,23,43,25,12,25,11,31,13],"II Samuel":[0,27,32,39,12,25,23,29,18,13,19,27,31,39,33,37,23,29,32,44,26,22,51,39,25],"I Kings":[0,53,46,28,20,32,38,51,66,28,29,43,33,34,31,34,34,24,46,21,43,29,54],"II Kings":[0,18,25,27,44,27,33,20,29,37,36,20,22,25,29,38,20,41,37,37,21,26,20,37,20,30],Isaiah:Isaiah,Jeremiah:Jeremiah,Lamentations:Lamentations,Baruch:Baruch,Ezekiel:Ezekiel,Daniel:Daniel,Hosea:Hosea,Joel:Joel,Amos:Amos,Obadiah:Obadiah,Jonah:Jonah,Micah:Micah,Nachum:Nachum,Habakkuk:Habakkuk,Zephaniah:Zephaniah,Haggai:Haggai,Zechariah:Zechariah,Malachi:Malachi};
5
5
 
@@ -12,10 +12,15 @@ const BOOK = ['', 'Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy'];
12
12
 
13
13
  /**
14
14
  * Formats parsha as a string
15
- * @param {string[]} parsha
15
+ * @param {string|string[]} parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
16
16
  * @return {string}
17
17
  */
18
18
  function parshaToString(parsha) {
19
+ if (typeof parsha === 'string') {
20
+ return parsha;
21
+ } else if (!Array.isArray(parsha) || parsha.length === 0 || parsha.length > 2) {
22
+ throw new TypeError(`Bad parsha argument: ${parsha}`);
23
+ }
19
24
  let s = parsha[0];
20
25
  if (parsha.length == 2) {
21
26
  s += '-' + parsha[1];
@@ -268,6 +273,9 @@ const HOLIDAY_IGNORE_MASK = flags.DAF_YOMI | flags.OMER_COUNT | flags.SHABBAT_ME
268
273
  * @return {string} key to look up in holiday-reading.json
269
274
  */
270
275
  function getLeyningKeyForEvent(ev, il = false) {
276
+ if (typeof ev.eventTime !== 'undefined') {
277
+ return undefined;
278
+ }
271
279
  const mask = ev.getFlags();
272
280
  if (mask & HOLIDAY_IGNORE_MASK) {
273
281
  return undefined;
@@ -330,6 +338,9 @@ function getLeyningKeyForEvent(ev, il = false) {
330
338
  } else if (il && desc == 'Shmini Atzeret') {
331
339
  return 'Simchat Torah';
332
340
  }
341
+ if (desc === 'Chag HaBanot') {
342
+ return undefined;
343
+ }
333
344
  if (isShabbat && 'Shabbat' != desc.substring(0, 7)) {
334
345
  if (isRoshChodesh) {
335
346
  if (desc === 'Rosh Chodesh Tevet') {
@@ -374,6 +385,16 @@ function getLeyningKeyForEvent(ev, il = false) {
374
385
  return undefined;
375
386
  }
376
387
 
388
+ /**
389
+ * Leyning for a parsha hashavua or holiday
390
+ * @typedef {Object} SpecialReading
391
+ * @property {Object<string,Aliyah>} aliyot - Map of aliyot `1` through `7` plus `M` for maftir
392
+ * @property {Object<string,string>} [reason] - Explanations for special readings,
393
+ * keyed by aliyah number, `M` for maftir or `haftara` for Haftarah
394
+ * @property {Aliyah|Aliyah[]} haft - Haftarah object(s)
395
+ * @property {Aliyah|Aliyah[]} seph - Haftarah object(s)
396
+ */
397
+
377
398
  /**
378
399
  * @private
379
400
  * @param {Object<string,Aliyah>} aliyot
@@ -417,24 +438,23 @@ function mergeAliyotWithSpecial(aliyot, special) {
417
438
  * a special maftir or Haftara (for example Shabbat HaGadol, Shabbat Chanukah, Rosh
418
439
  * Chodesh or Machar Chodesh, etc.).
419
440
  *
420
- * If a special maftir occurs, modifies `aliyot` to replace `M` and sets `reason.M`
421
- * (and in some cases modifies the 6th and 7th aliyah, setting `reason['7']`).
441
+ * This function does not modify `aliyot`. Instead, it returns a deep copy
442
+ * with `aliyot['M']` replaced and sets `reason.M`
443
+ * (and in some cases the 6th and 7th aliyah, setting `reason['7']`).
422
444
  *
423
- * If a special Haftarah applies, returns the Haftarah object and sets `reason.haftara`.
424
- * If no special Haftarah, returns `undefined`
445
+ * If a special Haftarah applies, the result will have a `haft` property
446
+ * pointing to Haftarah object and sets `reason.haftara`.
447
+ * @param {string[]} parsha
425
448
  * @param {HDate} hd
426
449
  * @param {boolean} il
427
450
  * @param {Object<string,Aliyah>} aliyot
428
- * @param {Object<string,string>} reason
429
- * @param {string[]} parsha
430
- * @param {boolean} [wantSeph]
431
- * @return {Aliyah | Aliyah[]}
451
+ * @return {SpecialReading}
432
452
  */
433
- function specialReadings(hd, il, aliyot, reason, parsha, wantSeph = false) {
453
+ function specialReadings2(parsha, hd, il, aliyot) {
434
454
  let haft;
435
455
  let seph;
436
456
  let specialHaft = false;
437
- const parshaName = parsha ? parshaToString(parsha) : null;
457
+ const reason = {};
438
458
 
439
459
  // eslint-disable-next-line require-jsdoc
440
460
  function handleSpecial(key) {
@@ -452,14 +472,17 @@ function specialReadings(hd, il, aliyot, reason, parsha, wantSeph = false) {
452
472
  }
453
473
  }
454
474
  if (special.fullkriyah) {
455
- mergeAliyotWithSpecial(aliyot, special.fullkriyah);
475
+ const aliyotMap = clone(aliyot);
476
+ mergeAliyotWithSpecial(aliyotMap, special.fullkriyah);
456
477
  Object.keys(special.fullkriyah).map(k => reason[k] = key);
478
+ aliyot = aliyotMap;
457
479
  }
458
480
  }
481
+ const parshaName = parshaToString(parsha);
459
482
  const events0 = HebrewCalendar.getHolidaysOnDate(hd, il) || [];
460
483
  const events = events0.filter(ev => !(ev.getFlags() & flags.ROSH_CHODESH));
461
484
  events.forEach(ev => {
462
- if (ev.getDesc() === 'Shabbat Shuva' && parshaName) {
485
+ if (ev.getDesc() === 'Shabbat Shuva') {
463
486
  handleSpecial(`Shabbat Shuva (with ${parshaName})`);
464
487
  } else {
465
488
  const key = getLeyningKeyForEvent(ev, il);
@@ -484,14 +507,12 @@ function specialReadings(hd, il, aliyot, reason, parsha, wantSeph = false) {
484
507
  }
485
508
  }
486
509
  }
487
- if (wantSeph && haft) {
488
- return {
489
- haft,
490
- seph
491
- };
492
- } else {
493
- return haft;
494
- }
510
+ return {
511
+ aliyot,
512
+ reason,
513
+ haft,
514
+ seph
515
+ };
495
516
  }
496
517
 
497
518
  const Bereshit={num:1,hebrew:"בְּרֵאשִׁית",book:1,haft:{k:"Isaiah",b:"42:5",e:"43:10"},seph:{k:"Isaiah",b:"42:5",e:"42:21"},fullkriyah:{"1":["1:1","2:3"],"2":["2:4","2:19"],"3":["2:20","3:21"],"4":["3:22","4:18"],"5":["4:19","4:22"],"6":["4:23","5:24"],"7":["5:25","6:8"],M:["6:5","6:8"]},weekday:{"1":["1:1","1:5"],"2":["1:6","1:8"],"3":["1:9","1:13"]}};const Noach={num:2,hebrew:"נֹחַ",book:1,haft:{k:"Isaiah",b:"54:1",e:"55:5"},seph:{k:"Isaiah",b:"54:1",e:"54:10"},fullkriyah:{"1":["6:9","6:22"],"2":["7:1","7:16"],"3":["7:17","8:14"],"4":["8:15","9:7"],"5":["9:8","9:17"],"6":["9:18","10:32"],"7":["11:1","11:32"],M:["11:29","11:32"]},weekday:{"1":["6:9","6:16"],"2":["6:17","6:19"],"3":["6:20","6:22"]}};const Vayera={num:4,hebrew:"וַיֵּרָא",book:1,haft:{k:"II Kings",b:"4:1",e:"4:37"},seph:{k:"II Kings",b:"4:1",e:"4:23"},fullkriyah:{"1":["18:1","18:14"],"2":["18:15","18:33"],"3":["19:1","19:20"],"4":["19:21","21:4"],"5":["21:5","21:21"],"6":["21:22","21:34"],"7":["22:1","22:24"],M:["22:20","22:24"]},weekday:{"1":["18:1","18:5"],"2":["18:6","18:8"],"3":["18:9","18:14"]}};const Toldot={num:6,hebrew:"תּוֹלְדוֹת",book:1,haft:{k:"Malachi",b:"1:1",e:"2:7"},fullkriyah:{"1":["25:19","26:5"],"2":["26:6","26:12"],"3":["26:13","26:22"],"4":["26:23","26:29"],"5":["26:30","27:27"],"6":["27:28","28:4"],"7":["28:5","28:9"],M:["28:7","28:9"]},weekday:{"1":["25:19","25:22"],"2":["25:23","25:26"],"3":["25:27","26:5"]}};const Vayetzei={num:7,hebrew:"וַיֵּצֵא",book:1,haft:{k:"Hosea",b:"12:13",e:"14:10"},seph:{k:"Hosea",b:"11:7",e:"12:12"},fullkriyah:{"1":["28:10","28:22"],"2":["29:1","29:17"],"3":["29:18","30:13"],"4":["30:14","30:27"],"5":["30:28","31:16"],"6":["31:17","31:42"],"7":["31:43","32:3"],M:["32:1","32:3"]},weekday:{"1":["28:10","28:12"],"2":["28:13","28:17"],"3":["28:18","28:22"]}};const Vayishlach={num:8,hebrew:"וַיִּשְׁלַח",book:1,haft:{k:"Obadiah",b:"1:1",e:"1:21"},fullkriyah:{"1":["32:4","32:13"],"2":["32:14","32:30"],"3":["32:31","33:5"],"4":["33:6","33:20"],"5":["34:1","35:11"],"6":["35:12","36:19"],"7":["36:20","36:43"],M:["36:40","36:43"]},weekday:{"1":["32:4","32:6"],"2":["32:7","32:9"],"3":["32:10","32:13"]}};const Vayeshev={num:9,hebrew:"וַיֵּשֶׁב",book:1,haft:{k:"Amos",b:"2:6",e:"3:8"},fullkriyah:{"1":["37:1","37:11"],"2":["37:12","37:22"],"3":["37:23","37:36"],"4":["38:1","38:30"],"5":["39:1","39:6"],"6":["39:7","39:23"],"7":["40:1","40:23"],M:["40:20","40:23"]},weekday:{"1":["37:1","37:3"],"2":["37:4","37:7"],"3":["37:8","37:11"]}};const Miketz={num:10,hebrew:"מִקֵּץ",book:1,haft:{k:"I Kings",b:"3:15",e:"4:1"},fullkriyah:{"1":["41:1","41:14"],"2":["41:15","41:38"],"3":["41:39","41:52"],"4":["41:53","42:18"],"5":["42:19","43:15"],"6":["43:16","43:29"],"7":["43:30","44:17"],M:["44:14","44:17"]},weekday:{"1":["41:1","41:4"],"2":["41:5","41:7"],"3":["41:8","41:14"]}};const Vayigash={num:11,hebrew:"וַיִּגַּשׁ",book:1,haft:{k:"Ezekiel",b:"37:15",e:"37:28"},fullkriyah:{"1":["44:18","44:30"],"2":["44:31","45:7"],"3":["45:8","45:18"],"4":["45:19","45:27"],"5":["45:28","46:27"],"6":["46:28","47:10"],"7":["47:11","47:27"],M:["47:25","47:27"]},weekday:{"1":["44:18","44:20"],"2":["44:21","44:24"],"3":["44:25","44:30"]}};const Vayechi={num:12,hebrew:"וַיְחִי",book:1,haft:{k:"I Kings",b:"2:1",e:"2:12"},fullkriyah:{"1":["47:28","48:9"],"2":["48:10","48:16"],"3":["48:17","48:22"],"4":["49:1","49:18"],"5":["49:19","49:26"],"6":["49:27","50:20"],"7":["50:21","50:26"],M:["50:23","50:26"]},weekday:{"1":["47:28","47:31"],"2":["48:1","48:3"],"3":["48:4","48:9"]}};const Shemot={num:13,hebrew:"שְׁמוֹת",book:2,haft:[{k:"Isaiah",b:"27:6",e:"28:13"},{k:"Isaiah",b:"29:22",e:"29:23"}],seph:{k:"Jeremiah",b:"1:1",e:"2:3"},fullkriyah:{"1":["1:1","1:17"],"2":["1:18","2:10"],"3":["2:11","2:25"],"4":["3:1","3:15"],"5":["3:16","4:17"],"6":["4:18","4:31"],"7":["5:1","6:1"],M:["5:22","6:1"]},weekday:{"1":["1:1","1:7"],"2":["1:8","1:12"],"3":["1:13","1:17"]}};const Vaera={num:14,hebrew:"וָאֵרָא",book:2,haft:{k:"Ezekiel",b:"28:25",e:"29:21"},fullkriyah:{"1":["6:2","6:13"],"2":["6:14","6:28"],"3":["6:29","7:7"],"4":["7:8","8:6"],"5":["8:7","8:18"],"6":["8:19","9:16"],"7":["9:17","9:35"],M:["9:33","9:35"]},weekday:{"1":["6:2","6:5"],"2":["6:6","6:9"],"3":["6:10","6:13"]}};const Bo={num:15,hebrew:"בֹּא",book:2,haft:{k:"Jeremiah",b:"46:13",e:"46:28"},fullkriyah:{"1":["10:1","10:11"],"2":["10:12","10:23"],"3":["10:24","11:3"],"4":["11:4","12:20"],"5":["12:21","12:28"],"6":["12:29","12:51"],"7":["13:1","13:16"],M:["13:14","13:16"]},weekday:{"1":["10:1","10:3"],"2":["10:4","10:6"],"3":["10:7","10:11"]}};const Beshalach={num:16,hebrew:"בְּשַׁלַּח",book:2,haft:{k:"Judges",b:"4:4",e:"5:31"},seph:{k:"Judges",b:"5:1",e:"5:31"},fullkriyah:{"1":["13:17","14:8"],"2":["14:9","14:14"],"3":["14:15","14:25"],"4":["14:26","15:26"],"5":["15:27","16:10"],"6":["16:11","16:36"],"7":["17:1","17:16"],M:["17:14","17:16"]},weekday:{"1":["13:17","13:22"],"2":["14:1","14:4"],"3":["14:5","14:8"]}};const Yitro={num:17,hebrew:"יִתְרוֹ",book:2,haft:[{k:"Isaiah",b:"6:1",e:"7:6"},{k:"Isaiah",b:"9:5",e:"9:6"}],seph:{k:"Isaiah",b:"6:1",e:"6:13"},fullkriyah:{"1":["18:1","18:12"],"2":["18:13","18:23"],"3":["18:24","18:27"],"4":["19:1","19:6"],"5":["19:7","19:19"],"6":["19:20","20:14"],"7":["20:15","20:23"],M:["20:19","20:23"]},weekday:{"1":["18:1","18:4"],"2":["18:5","18:8"],"3":["18:9","18:12"]}};const Mishpatim={num:18,hebrew:"מִּשְׁפָּטִים",book:2,haft:[{k:"Jeremiah",b:"34:8",e:"34:22"},{k:"Jeremiah",b:"33:25",e:"33:26"}],fullkriyah:{"1":["21:1","21:19"],"2":["21:20","22:3"],"3":["22:4","22:26"],"4":["22:27","23:5"],"5":["23:6","23:19"],"6":["23:20","23:25"],"7":["23:26","24:18"],M:["24:15","24:18"]},weekday:{"1":["21:1","21:6"],"2":["21:7","21:11"],"3":["21:12","21:19"]}};const Terumah={num:19,hebrew:"תְּרוּמָה",book:2,haft:{k:"I Kings",b:"5:26",e:"6:13"},fullkriyah:{"1":["25:1","25:16"],"2":["25:17","25:30"],"3":["25:31","26:14"],"4":["26:15","26:30"],"5":["26:31","26:37"],"6":["27:1","27:8"],"7":["27:9","27:19"],M:["27:17","27:19"]},weekday:{"1":["25:1","25:5"],"2":["25:6","25:9"],"3":["25:10","25:16"]}};const Tetzaveh={num:20,hebrew:"תְּצַוֶּה",book:2,haft:{k:"Ezekiel",b:"43:10",e:"43:27"},fullkriyah:{"1":["27:20","28:12"],"2":["28:13","28:30"],"3":["28:31","28:43"],"4":["29:1","29:18"],"5":["29:19","29:37"],"6":["29:38","29:46"],"7":["30:1","30:10"],M:["30:8","30:10"]},weekday:{"1":["27:20","28:5"],"2":["28:6","28:9"],"3":["28:10","28:12"]}};const Vayakhel={num:22,hebrew:"וַיַּקְהֵל",book:2,haft:{k:"I Kings",b:"7:40",e:"7:50"},seph:{k:"I Kings",b:"7:13",e:"7:26"},fullkriyah:{"1":["35:1","35:20"],"2":["35:21","35:29"],"3":["35:30","36:7"],"4":["36:8","36:19"],"5":["36:20","37:16"],"6":["37:17","37:29"],"7":["38:1","38:20"],M:["38:18","38:20"]},weekday:{"1":["35:1","35:3"],"2":["35:4","35:10"],"3":["35:11","35:20"]}};const Pekudei={num:23,hebrew:"פְקוּדֵי",book:2,haft:{k:"I Kings",b:"7:51",e:"8:21"},seph:{k:"I Kings",b:"7:40",e:"7:50"},fullkriyah:{"1":["38:21","39:1"],"2":["39:2","39:21"],"3":["39:22","39:32"],"4":["39:33","39:43"],"5":["40:1","40:16"],"6":["40:17","40:27"],"7":["40:28","40:38"],M:["40:34","40:38"]},weekday:{"1":["38:21","38:23"],"2":["38:24","38:27"],"3":["38:28","39:1"]}};const Vayikra={num:24,hebrew:"וַיִּקְרָא",book:3,haft:{k:"Isaiah",b:"43:21",e:"44:23"},fullkriyah:{"1":["1:1","1:13"],"2":["1:14","2:6"],"3":["2:7","2:16"],"4":["3:1","3:17"],"5":["4:1","4:26"],"6":["4:27","5:10"],"7":["5:11","5:26"],M:["5:24","5:26"]},weekday:{"1":["1:1","1:4"],"2":["1:5","1:9"],"3":["1:10","1:13"]}};const Tzav={num:25,hebrew:"צַו",book:3,haft:[{k:"Jeremiah",b:"7:21",e:"8:3"},{k:"Jeremiah",b:"9:22",e:"9:23"}],fullkriyah:{"1":["6:1","6:11"],"2":["6:12","7:10"],"3":["7:11","7:38"],"4":["8:1","8:13"],"5":["8:14","8:21"],"6":["8:22","8:29"],"7":["8:30","8:36"],M:["8:33","8:36"]},weekday:{"1":["6:1","6:3"],"2":["6:4","6:6"],"3":["6:7","6:11"]}};const Shmini={num:26,hebrew:"שְּׁמִינִי",book:3,haft:{k:"II Samuel",b:"6:1",e:"7:17"},seph:{k:"II Samuel",b:"6:1",e:"6:19"},fullkriyah:{"1":["9:1","9:16"],"2":["9:17","9:23"],"3":["9:24","10:11"],"4":["10:12","10:15"],"5":["10:16","10:20"],"6":["11:1","11:32"],"7":["11:33","11:47"],M:["11:45","11:47"]},weekday:{"1":["9:1","9:6"],"2":["9:7","9:10"],"3":["9:11","9:16"]}};const Tazria={num:27,hebrew:"תַזְרִיעַ",book:3,haft:{k:"II Kings",b:"4:42",e:"5:19"},fullkriyah:{"1":["12:1","13:5"],"2":["13:6","13:17"],"3":["13:18","13:23"],"4":["13:24","13:28"],"5":["13:29","13:39"],"6":["13:40","13:54"],"7":["13:55","13:59"],M:["13:57","13:59"]},weekday:{"1":["12:1","12:4"],"2":["12:5","12:8"],"3":["13:1","13:5"]}};const Metzora={num:28,hebrew:"מְּצֹרָע",book:3,haft:{k:"II Kings",b:"7:3",e:"7:20"},fullkriyah:{"1":["14:1","14:12"],"2":["14:13","14:20"],"3":["14:21","14:32"],"4":["14:33","14:53"],"5":["14:54","15:15"],"6":["15:16","15:28"],"7":["15:29","15:33"],M:["15:31","15:33"]},weekday:{"1":["14:1","14:5"],"2":["14:6","14:9"],"3":["14:10","14:12"]}};const Kedoshim={num:30,hebrew:"קְדשִׁים",book:3,haft:{k:"Amos",b:"9:7",e:"9:15"},seph:{k:"Ezekiel",b:"20:2",e:"20:20"},fullkriyah:{"1":["19:1","19:14"],"2":["19:15","19:22"],"3":["19:23","19:32"],"4":["19:33","19:37"],"5":["20:1","20:7"],"6":["20:8","20:22"],"7":["20:23","20:27"],M:["20:25","20:27"]},weekday:{"1":["19:1","19:4"],"2":["19:5","19:10"],"3":["19:11","19:14"]}};const Emor={num:31,hebrew:"אֱמוֹר",book:3,haft:{k:"Ezekiel",b:"44:15",e:"44:31"},fullkriyah:{"1":["21:1","21:15"],"2":["21:16","22:16"],"3":["22:17","22:33"],"4":["23:1","23:22"],"5":["23:23","23:32"],"6":["23:33","23:44"],"7":["24:1","24:23"],M:["24:21","24:23"]},weekday:{"1":["21:1","21:6"],"2":["21:7","21:12"],"3":["21:13","21:15"]}};const Behar={num:32,hebrew:"בְּהַר",book:3,haft:{k:"Jeremiah",b:"32:6",e:"32:27"},fullkriyah:{"1":["25:1","25:13"],"2":["25:14","25:18"],"3":["25:19","25:24"],"4":["25:25","25:28"],"5":["25:29","25:38"],"6":["25:39","25:46"],"7":["25:47","26:2"],M:["25:55","26:2"]},weekday:{"1":["25:1","25:3"],"2":["25:4","25:7"],"3":["25:8","25:13"]}};const Bechukotai={num:33,hebrew:"בְּחֻקֹּתַי",book:3,haft:{k:"Jeremiah",b:"16:19",e:"17:14"},fullkriyah:{"1":["26:3","26:5"],"2":["26:6","26:9"],"3":["26:10","26:46"],"4":["27:1","27:15"],"5":["27:16","27:21"],"6":["27:22","27:28"],"7":["27:29","27:34"],M:["27:32","27:34"]},weekday:{"1":["26:3","26:5"],"2":["26:6","26:9"],"3":["26:10","26:13"]}};const Bamidbar={num:34,hebrew:"בְּמִדְבַּר",book:4,haft:{k:"Hosea",b:"2:1",e:"2:22"},fullkriyah:{"1":["1:1","1:19"],"2":["1:20","1:54"],"3":["2:1","2:34"],"4":["3:1","3:13"],"5":["3:14","3:39"],"6":["3:40","3:51"],"7":["4:1","4:20"],M:["4:17","4:20"]},weekday:{"1":["1:1","1:4"],"2":["1:5","1:16"],"3":["1:17","1:19"]}};const Nasso={num:35,hebrew:"נָשׂא",book:4,haft:{k:"Judges",b:"13:2",e:"13:25"},fullkriyah:{"1":["4:21","4:37"],"2":["4:38","4:49"],"3":["5:1","5:10"],"4":["5:11","6:27"],"5":["7:1","7:41"],"6":["7:42","7:71"],"7":["7:72","7:89"],M:["7:87","7:89"]},weekday:{"1":["4:21","4:24"],"2":["4:25","4:28"],"3":["4:29","4:33"]}};const Korach={num:38,hebrew:"קוֹרַח",book:4,haft:{k:"I Samuel",b:"11:14",e:"12:22"},fullkriyah:{"1":["16:1","16:13"],"2":["16:14","16:19"],"3":["16:20","17:8"],"4":["17:9","17:15"],"5":["17:16","17:24"],"6":["17:25","18:20"],"7":["18:21","18:32"],M:["18:30","18:32"]},weekday:{"1":["16:1","16:3"],"2":["16:4","16:7"],"3":["16:8","16:13"]}};const Chukat={num:39,hebrew:"חֻקַּת",book:4,haft:{k:"Judges",b:"11:1",e:"11:33"},fullkriyah:{"1":["19:1","19:17"],"2":["19:18","20:6"],"3":["20:7","20:13"],"4":["20:14","20:21"],"5":["20:22","21:9"],"6":["21:10","21:20"],"7":["21:21","22:1"],M:["21:34","22:1"]},weekday:{"1":["19:1","19:6"],"2":["19:7","19:9"],"3":["19:10","19:17"]}};const Balak={num:40,hebrew:"בָּלָק",book:4,haft:{k:"Micah",b:"5:6",e:"6:8"},fullkriyah:{"1":["22:2","22:12"],"2":["22:13","22:20"],"3":["22:21","22:38"],"4":["22:39","23:12"],"5":["23:13","23:26"],"6":["23:27","24:13"],"7":["24:14","25:9"],M:["25:7","25:9"]},weekday:{"1":["22:2","22:4"],"2":["22:5","22:7"],"3":["22:8","22:12"]}};const Pinchas={num:41,hebrew:"פִּינְחָס",book:4,haft:{k:"I Kings",b:"18:46",e:"19:21"},fullkriyah:{"1":["25:10","26:4"],"2":["26:5","26:51"],"3":["26:52","27:5"],"4":["27:6","27:23"],"5":["28:1","28:15"],"6":["28:16","29:11"],"7":["29:12","30:1"],M:["29:35","30:1"]},weekday:{"1":["25:10","25:12"],"2":["25:13","25:15"],"3":["25:16","26:4"]}};const Matot={num:42,hebrew:"מַּטּוֹת",book:4,haft:{k:"Jeremiah",b:"1:1",e:"2:3"},fullkriyah:{"1":["30:2","30:17"],"2":["31:1","31:12"],"3":["31:13","31:24"],"4":["31:25","31:41"],"5":["31:42","31:54"],"6":["32:1","32:19"],"7":["32:20","32:42"],M:["32:39","32:42"]},weekday:{"1":["30:2","30:9"],"2":["30:10","30:13"],"3":["30:14","30:17"]}};const Masei={num:43,hebrew:"מַסְעֵי",book:4,haft:[{k:"Jeremiah",b:"2:4",e:"2:28"},{k:"Jeremiah",b:"3:4",e:"3:4"}],seph:[{k:"Jeremiah",b:"2:4",e:"2:28"},{k:"Jeremiah",b:"4:1",e:"4:2"}],fullkriyah:{"1":["33:1","33:10"],"2":["33:11","33:49"],"3":["33:50","34:15"],"4":["34:16","34:29"],"5":["35:1","35:8"],"6":["35:9","35:34"],"7":["36:1","36:13"],M:["36:11","36:13"]},weekday:{"1":["33:1","33:3"],"2":["33:4","33:6"],"3":["33:7","33:10"]}};const Devarim={num:44,hebrew:"דְּבָרִים",book:5,haft:{k:"Isaiah",b:"1:1",e:"1:27"},fullkriyah:{"1":["1:1","1:10"],"2":["1:11","1:21"],"3":["1:22","1:38"],"4":["1:39","2:1"],"5":["2:2","2:30"],"6":["2:31","3:14"],"7":["3:15","3:22"],M:["3:20","3:22"]},weekday:{"1":["1:1","1:3"],"2":["1:4","1:7"],"3":["1:8","1:11"]}};const Vaetchanan={num:45,hebrew:"וָאֶתְחַנַּן",book:5,haft:{k:"Isaiah",b:"40:1",e:"40:26"},fullkriyah:{"1":["3:23","4:4"],"2":["4:5","4:40"],"3":["4:41","4:49"],"4":["5:1","5:18"],"5":["5:19","6:3"],"6":["6:4","6:25"],"7":["7:1","7:11"],M:["7:9","7:11"]},weekday:{"1":["3:23","3:25"],"2":["3:26","4:4"],"3":["4:5","4:8"]}};const Eikev={num:46,hebrew:"עֵקֶב",book:5,haft:{k:"Isaiah",b:"49:14",e:"51:3"},fullkriyah:{"1":["7:12","8:10"],"2":["8:11","9:3"],"3":["9:4","9:29"],"4":["10:1","10:11"],"5":["10:12","11:9"],"6":["11:10","11:21"],"7":["11:22","11:25"],M:["11:22","11:25"]},weekday:{"1":["7:12","7:21"],"2":["7:22","8:3"],"3":["8:4","8:10"]}};const Shoftim={num:48,hebrew:"שׁוֹפְטִים",book:5,haft:{k:"Isaiah",b:"51:12",e:"52:12"},fullkriyah:{"1":["16:18","17:13"],"2":["17:14","17:20"],"3":["18:1","18:5"],"4":["18:6","18:13"],"5":["18:14","19:13"],"6":["19:14","20:9"],"7":["20:10","21:9"],M:["21:7","21:9"]},weekday:{"1":["16:18","16:20"],"2":["16:21","17:10"],"3":["17:11","17:13"]}};const Nitzavim={num:51,hebrew:"נִצָּבִים",book:5,haft:{k:"Isaiah",b:"61:10",e:"63:9"},fullkriyah:{"1":["29:9","29:11"],"2":["29:12","29:14"],"3":["29:15","29:28"],"4":["30:1","30:6"],"5":["30:7","30:10"],"6":["30:11","30:14"],"7":["30:15","30:20"],M:["30:15","30:20"]},weekday:{"1":["29:9","29:11"],"2":["29:12","29:14"],"3":["29:15","29:28"]}};const Vayeilech={num:52,hebrew:"וַיֵּלֶךְ",book:5,haft:{k:"Isaiah",b:"55:6",e:"56:8"},fullkriyah:{"1":["31:1","31:3"],"2":["31:4","31:6"],"3":["31:7","31:9"],"4":["31:10","31:13"],"5":["31:14","31:19"],"6":["31:20","31:24"],"7":["31:25","31:30"],M:["31:28","31:30"]},weekday:{"1":["31:1","31:3"],"2":["31:4","31:6"],"3":["31:7","31:13"]}};var parshiyotObj = {Bereshit:Bereshit,Noach:Noach,"Lech-Lecha":{num:3,hebrew:"לֶךְ־לְךָ",book:1,haft:{k:"Isaiah",b:"40:27",e:"41:16"},fullkriyah:{"1":["12:1","12:13"],"2":["12:14","13:4"],"3":["13:5","13:18"],"4":["14:1","14:20"],"5":["14:21","15:6"],"6":["15:7","17:6"],"7":["17:7","17:27"],M:["17:24","17:27"]},weekday:{"1":["12:1","12:3"],"2":["12:4","12:9"],"3":["12:10","12:13"]}},Vayera:Vayera,"Chayei Sara":{num:5,hebrew:"חַיֵּי שָֹרָה",book:1,haft:{k:"I Kings",b:"1:1",e:"1:31"},fullkriyah:{"1":["23:1","23:16"],"2":["23:17","24:9"],"3":["24:10","24:26"],"4":["24:27","24:52"],"5":["24:53","24:67"],"6":["25:1","25:11"],"7":["25:12","25:18"],M:["25:16","25:18"]},weekday:{"1":["23:1","23:7"],"2":["23:8","23:12"],"3":["23:13","23:16"]}},Toldot:Toldot,Vayetzei:Vayetzei,Vayishlach:Vayishlach,Vayeshev:Vayeshev,Miketz:Miketz,Vayigash:Vayigash,Vayechi:Vayechi,Shemot:Shemot,Vaera:Vaera,Bo:Bo,Beshalach:Beshalach,Yitro:Yitro,Mishpatim:Mishpatim,Terumah:Terumah,Tetzaveh:Tetzaveh,"Ki Tisa":{num:21,hebrew:"כִּי תִשָּׂא",book:2,haft:{k:"I Kings",b:"18:1",e:"18:39"},seph:{k:"I Kings",b:"18:20",e:"18:39"},fullkriyah:{"1":["30:11","31:17"],"2":["31:18","33:11"],"3":["33:12","33:16"],"4":["33:17","33:23"],"5":["34:1","34:9"],"6":["34:10","34:26"],"7":["34:27","34:35"],M:["34:33","34:35"]},weekday:{"1":["30:11","30:13"],"2":["30:14","30:16"],"3":["30:17","30:21"]}},Vayakhel:Vayakhel,Pekudei:Pekudei,Vayikra:Vayikra,Tzav:Tzav,Shmini:Shmini,Tazria:Tazria,Metzora:Metzora,"Achrei Mot":{num:29,hebrew:"אַחֲרֵי מוֹת",book:3,haft:{k:"Ezekiel",b:"22:1",e:"22:19"},seph:{k:"Ezekiel",b:"22:1",e:"22:16"},fullkriyah:{"1":["16:1","16:17"],"2":["16:18","16:24"],"3":["16:25","16:34"],"4":["17:1","17:7"],"5":["17:8","18:5"],"6":["18:6","18:21"],"7":["18:22","18:30"],M:["18:28","18:30"]},weekday:{"1":["16:1","16:6"],"2":["16:7","16:11"],"3":["16:12","16:17"]}},Kedoshim:Kedoshim,Emor:Emor,Behar:Behar,Bechukotai:Bechukotai,Bamidbar:Bamidbar,Nasso:Nasso,"Beha'alotcha":{num:36,hebrew:"בְּהַעֲלֹתְךָ",book:4,haft:{k:"Zechariah",b:"2:14",e:"4:7"},fullkriyah:{"1":["8:1","8:14"],"2":["8:15","8:26"],"3":["9:1","9:14"],"4":["9:15","10:10"],"5":["10:11","10:34"],"6":["10:35","11:29"],"7":["11:30","12:16"],M:["12:14","12:16"]},weekday:{"1":["8:1","8:4"],"2":["8:5","8:9"],"3":["8:10","8:14"]}},"Sh'lach":{num:37,hebrew:"שְׁלַח־לְךָ",book:4,haft:{k:"Joshua",b:"2:1",e:"2:24"},fullkriyah:{"1":["13:1","13:20"],"2":["13:21","14:7"],"3":["14:8","14:25"],"4":["14:26","15:7"],"5":["15:8","15:16"],"6":["15:17","15:26"],"7":["15:27","15:41"],M:["15:37","15:41"]},weekday:{"1":["13:1","13:3"],"2":["13:4","13:16"],"3":["13:17","13:20"]}},Korach:Korach,Chukat:Chukat,Balak:Balak,Pinchas:Pinchas,Matot:Matot,Masei:Masei,Devarim:Devarim,Vaetchanan:Vaetchanan,Eikev:Eikev,"Re'eh":{num:47,hebrew:"רְאֵה",book:5,haft:{k:"Isaiah",b:"54:11",e:"55:5"},fullkriyah:{"1":["11:26","12:10"],"2":["12:11","12:28"],"3":["12:29","13:19"],"4":["14:1","14:21"],"5":["14:22","14:29"],"6":["15:1","15:18"],"7":["15:19","16:17"],M:["16:13","16:17"]},weekday:{"1":["11:26","11:31"],"2":["11:32","12:5"],"3":["12:6","12:10"]}},Shoftim:Shoftim,"Ki Teitzei":{num:49,hebrew:"כִּי־תֵצֵא",book:5,haft:{k:"Isaiah",b:"54:1",e:"54:10"},fullkriyah:{"1":["21:10","21:21"],"2":["21:22","22:7"],"3":["22:8","23:7"],"4":["23:8","23:24"],"5":["23:25","24:4"],"6":["24:5","24:13"],"7":["24:14","25:19"],M:["25:17","25:19"]},weekday:{"1":["21:10","21:14"],"2":["21:15","21:17"],"3":["21:18","21:21"]}},"Ki Tavo":{num:50,hebrew:"כִּי־תָבוֹא",book:5,haft:{k:"Isaiah",b:"60:1",e:"60:22"},fullkriyah:{"1":["26:1","26:11"],"2":["26:12","26:15"],"3":["26:16","26:19"],"4":["27:1","27:10"],"5":["27:11","28:6"],"6":["28:7","28:69"],"7":["29:1","29:8"],M:["29:6","29:8"]},weekday:{"1":["26:1","26:3"],"2":["26:4","26:11"],"3":["26:12","26:15"]}},Nitzavim:Nitzavim,Vayeilech:Vayeilech,"Ha'Azinu":{num:53,hebrew:"הַאֲזִינוּ",book:5,haft:{k:"II Samuel",b:"22:1",e:"22:51"},fullkriyah:{"1":["32:1","32:6"],"2":["32:7","32:12"],"3":["32:13","32:18"],"4":["32:19","32:28"],"5":["32:29","32:39"],"6":["32:40","32:43"],"7":["32:44","32:52"],M:["32:48","32:52"]},weekday:{"1":["32:1","32:3"],"2":["32:4","32:6"],"3":["32:7","32:12"]}},"Vezot Haberakhah":{num:54,hebrew:"וְזֹאת הַבְּרָכָה",book:5,haft:{k:"Joshua",b:"1:1",e:"1:18"},seph:{k:"Joshua",b:"1:1",e:"1:9"},fullkriyah:{"1":["33:1","33:7"],"2":["33:8","33:12"],"3":["33:13","33:17"],"4":["33:18","33:21"],"5":["33:22","33:26"],"6":["33:27","33:29"],"7":["34:1","34:12"]},weekday:{"1":["33:1","33:7"],"2":["33:8","33:12"],"3":["33:13","33:17"]}},"Vayakhel-Pekudei":{num:101,combined:true,p1:"Vayakhel",p2:"Pekudei",num1:22,num2:23,book:2,fullkriyah:{"1":["35:1","35:29"],"2":["35:30","37:16"],"3":["37:17","37:29"],"4":["38:1","39:1"],"5":["39:2","39:21"],"6":["39:22","39:43"],"7":["40:1","40:38"],M:["40:34","40:38"]}},"Tazria-Metzora":{num:102,combined:true,p1:"Tazria",p2:"Metzora",num1:27,num2:28,book:3,fullkriyah:{"1":["12:1","13:23"],"2":["13:24","13:39"],"3":["13:40","13:54"],"4":["13:55","14:20"],"5":["14:21","14:32"],"6":["14:33","15:15"],"7":["15:16","15:33"],M:["15:31","15:33"]}},"Achrei Mot-Kedoshim":{num:103,combined:true,p1:"Achrei Mot",p2:"Kedoshim",num1:29,num2:30,book:3,fullkriyah:{"1":["16:1","16:24"],"2":["16:25","17:7"],"3":["17:8","18:21"],"4":["18:22","19:14"],"5":["19:15","19:32"],"6":["19:33","20:7"],"7":["20:8","20:27"],M:["20:25","20:27"]}},"Behar-Bechukotai":{num:104,combined:true,p1:"Behar",p2:"Bechukotai",num1:32,num2:33,book:3,fullkriyah:{"1":["25:1","25:18"],"2":["25:19","25:28"],"3":["25:29","25:38"],"4":["25:39","26:9"],"5":["26:10","26:46"],"6":["27:1","27:15"],"7":["27:16","27:34"],M:["27:32","27:34"]}},"Chukat-Balak":{num:105,combined:true,p1:"Chukat",p2:"Balak",num1:39,num2:40,book:4,fullkriyah:{"1":["19:1","20:6"],"2":["20:7","20:21"],"3":["20:22","21:20"],"4":["21:21","22:12"],"5":["22:13","22:38"],"6":["22:39","23:26"],"7":["23:27","25:9"],M:["25:7","25:9"]}},"Matot-Masei":{num:106,combined:true,p1:"Matot",p2:"Masei",num1:42,num2:43,book:4,fullkriyah:{"1":["30:2","31:12"],"2":["31:13","31:54"],"3":["32:1","32:19"],"4":["32:20","33:49"],"5":["33:50","34:15"],"6":["34:16","35:8"],"7":["35:9","36:13"],M:["36:11","36:13"]}},"Nitzavim-Vayeilech":{num:107,combined:true,p1:"Nitzavim",p2:"Vayeilech",num1:51,num2:52,book:5,fullkriyah:{"1":["29:9","29:28"],"2":["30:1","30:6"],"3":["30:7","30:14"],"4":["30:15","31:6"],"5":["31:7","31:13"],"6":["31:14","31:19"],"7":["31:20","31:30"],M:["31:28","31:30"]}}};
@@ -543,8 +564,10 @@ const Bereshit={num:1,hebrew:"בְּרֵאשִׁית",book:1,haft:{k:"Isaiah",b:
543
564
  * @return {Leyning} map of aliyot
544
565
  */
545
566
  function getLeyningForHoliday(ev, il = false) {
546
- if (typeof ev !== 'object' || !(ev instanceof Event)) {
567
+ if (typeof ev !== 'object' || typeof ev.getFlags !== 'function') {
547
568
  throw new TypeError(`Bad event argument: ${ev}`);
569
+ } else if (typeof ev.eventTime !== 'undefined') {
570
+ return undefined;
548
571
  } else if (ev.getFlags() & flags.PARSHA_HASHAVUA) {
549
572
  throw new TypeError(`Event should be a holiday: ${ev.getDesc()}`);
550
573
  } else if (ev.getFlags() & HOLIDAY_IGNORE_MASK) {
@@ -624,16 +647,12 @@ function getHaftaraKey(parsha) {
624
647
 
625
648
  /**
626
649
  * Looks up regular leyning for a weekly parsha with no special readings
650
+ * @private
627
651
  * @param {string|string[]} parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
628
652
  * @return {Leyning} map of aliyot
629
653
  */
630
- function getLeyningForParsha(parsha) {
631
- const isParshaString = typeof parsha === 'string';
632
- if (!isParshaString && (!Array.isArray(parsha) || parsha.length !== 1 && parsha.length !== 2)) {
633
- throw new TypeError(`Bad parsha argument: ${parsha}`);
634
- }
635
- const name = isParshaString ? parsha : parshaToString(parsha);
636
- const raw = parshiyotObj[name];
654
+ function getLeyningForParshaShabbatOnly(parsha) {
655
+ const raw = lookupParsha(parsha);
637
656
  const fullkriyah = {};
638
657
  const book = BOOK[raw.book];
639
658
  Object.keys(raw.fullkriyah).forEach(num => {
@@ -646,7 +665,8 @@ function getLeyningForParsha(parsha) {
646
665
  fullkriyah[num] = reading;
647
666
  });
648
667
  Object.values(fullkriyah).map(aliyah => calculateNumVerses(aliyah));
649
- const parshaNameArray = isParshaString ? raw.combined ? [raw.p1, raw.p2] : [parsha] : parsha;
668
+ const name = parshaToString(parsha);
669
+ const parshaNameArray = raw.combined ? [raw.p1, raw.p2] : [name];
650
670
  const parts = makeLeyningParts(fullkriyah);
651
671
  const summary = makeSummaryFromParts(parts);
652
672
  /** @type {Leyning} */
@@ -675,20 +695,45 @@ function getLeyningForParsha(parsha) {
675
695
  result.sephardic = makeSummaryFromParts(seph);
676
696
  result.sephardicNumV = sumVerses(seph);
677
697
  }
678
- const weekdaySrc = raw.weekday || parshiyotObj[parshaNameArray[0]].weekday;
679
- if (weekdaySrc) {
680
- const weekday = result.weekday = {};
681
- ['1', '2', '3'].forEach(num => {
682
- const src = weekdaySrc[num];
683
- const aliyah = {
684
- k: book,
685
- b: src[0],
686
- e: src[1]
687
- };
688
- calculateNumVerses(aliyah);
689
- weekday[num] = aliyah;
690
- });
698
+ return result;
699
+ }
700
+
701
+ /**
702
+ * Looks up Monday/Thursday aliyot for a regular parsha
703
+ * @param {string|string[]} parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
704
+ * @return {Object<string,Aliyah>} map of aliyot
705
+ */
706
+ function getWeekdayReading(parsha) {
707
+ const raw = lookupParsha(parsha);
708
+ const parshaMeta = raw.combined ? lookupParsha(raw.p1) : raw;
709
+ const aliyot = parshaMeta.weekday;
710
+ if (!aliyot) {
711
+ throw new Error(`Parsha missing weekday: ${parsha}`);
691
712
  }
713
+ const book = BOOK[raw.book];
714
+ const weekday = {};
715
+ for (let i = 1; i <= 3; i++) {
716
+ const num = '' + i;
717
+ const src = aliyot[num];
718
+ const aliyah = {
719
+ k: book,
720
+ b: src[0],
721
+ e: src[1]
722
+ };
723
+ calculateNumVerses(aliyah);
724
+ weekday[num] = aliyah;
725
+ }
726
+ return weekday;
727
+ }
728
+
729
+ /**
730
+ * Looks up regular leyning for a weekly parsha with no special readings
731
+ * @param {string|string[]} parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
732
+ * @return {Leyning} map of aliyot
733
+ */
734
+ function getLeyningForParsha(parsha) {
735
+ const result = getLeyningForParshaShabbatOnly(parsha);
736
+ result.weekday = getWeekdayReading(parsha);
692
737
  return result;
693
738
  }
694
739
 
@@ -700,29 +745,30 @@ function getLeyningForParsha(parsha) {
700
745
  * @return {Leyning} map of aliyot
701
746
  */
702
747
  function getLeyningForParshaHaShavua(ev, il = false) {
703
- if (!ev instanceof Event) {
748
+ if (typeof ev !== 'object' || typeof ev.getFlags !== 'function') {
704
749
  throw new TypeError(`Bad event argument: ${ev}`);
705
750
  } else if (ev.getFlags() != flags.PARSHA_HASHAVUA) {
706
751
  throw new TypeError(`Event must be parsha hashavua: ${ev.getDesc()}`);
707
752
  }
708
753
  // first, collect the default aliyot and haftara
709
754
  const parsha = ev.parsha;
710
- const result = getLeyningForParsha(parsha);
711
- const reason = {};
755
+ const result = getLeyningForParshaShabbatOnly(parsha);
712
756
  const hd = ev.getDate();
713
757
  // Now, check for special maftir or haftara on same date
714
- const specialHaftara = specialReadings(hd, il, result.fullkriyah, reason, parsha, true);
715
- if (specialHaftara) {
716
- const haft = result.haft = cloneHaftara(specialHaftara.haft);
758
+ const special = specialReadings2(parsha, hd, il, result.fullkriyah);
759
+ const reason = special.reason;
760
+ if (special.haft) {
761
+ const haft = result.haft = cloneHaftara(special.haft);
717
762
  result.haftara = makeSummaryFromParts(haft);
718
763
  result.haftaraNumV = sumVerses(haft);
719
- if (specialHaftara.seph) {
720
- const seph = result.seph = cloneHaftara(specialHaftara.seph);
764
+ if (special.seph) {
765
+ const seph = result.seph = cloneHaftara(special.seph);
721
766
  result.sephardic = makeSummaryFromParts(seph);
722
767
  result.sephardicNumV = sumVerses(seph);
723
768
  }
724
769
  }
725
770
  if (reason['7'] || reason['M']) {
771
+ result.fullkriyah = special.aliyot;
726
772
  const parts = makeLeyningParts(result.fullkriyah);
727
773
  result.summary = makeSummaryFromParts(parts);
728
774
  result.summaryParts = parts;
@@ -743,8 +789,6 @@ function getLeyningForParshaHaShavua(ev, il = false) {
743
789
  }
744
790
  });
745
791
  }
746
- // to avoid confusion, don't include Saturday mincha reading here
747
- delete result.weekday;
748
792
  return result;
749
793
  }
750
794
 
@@ -839,15 +883,11 @@ function findParshaHaShavua(saturday, il) {
839
883
 
840
884
  /**
841
885
  * Returns the parsha metadata
842
- * @param {string|string[]} parsha
886
+ * @param {string|string[]} parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
843
887
  * @return {ParshaMeta}
844
888
  */
845
889
  function lookupParsha(parsha) {
846
- const isParshaString = typeof parsha === 'string';
847
- if (!isParshaString && (!Array.isArray(parsha) || parsha.length !== 1 && parsha.length !== 2)) {
848
- throw new TypeError(`Bad parsha argument: ${parsha}`);
849
- }
850
- const name = isParshaString ? parsha : parshaToString(parsha);
890
+ const name = parshaToString(parsha);
851
891
  const raw = parshiyotObj[name];
852
892
  if (typeof raw !== 'object') {
853
893
  throw new TypeError(`Bad parsha argument: ${parsha}`);
@@ -1026,4 +1066,4 @@ function getFullKriyahLines(reading) {
1026
1066
  return lines;
1027
1067
  }
1028
1068
 
1029
- export { BOOK, calculateNumVerses, clone, cloneHaftara, formatAliyahShort, formatAliyahWithBook, getLeyningForHoliday, getLeyningForHolidayKey, getLeyningForParsha, getLeyningForParshaHaShavua, getLeyningKeyForEvent, getLeyningOnDate, getParshaDates, hasFestival, lookupFestival, lookupParsha, makeLeyningParts, makeLeyningSummary, makeSummaryFromParts, parshaToString, specialReadings, sumVerses, writeCsvLines, writeFullKriyahCsv, writeHolidayMincha };
1069
+ export { BOOK, calculateNumVerses, clone, cloneHaftara, formatAliyahShort, formatAliyahWithBook, getLeyningForHoliday, getLeyningForHolidayKey, getLeyningForParsha, getLeyningForParshaHaShavua, getLeyningKeyForEvent, getLeyningOnDate, getParshaDates, getWeekdayReading, hasFestival, lookupFestival, lookupParsha, makeLeyningParts, makeLeyningSummary, makeSummaryFromParts, parshaToString, specialReadings2, sumVerses, writeCsvLines, writeFullKriyahCsv, writeHolidayMincha };
package/leyning.d.ts CHANGED
@@ -65,11 +65,6 @@ declare module '@hebcal/leyning' {
65
65
  reason?: StringMap;
66
66
  };
67
67
 
68
- export type HaftaraAshkSeph = {
69
- haft: Aliyah | Aliyah[];
70
- seph?: Aliyah | Aliyah[];
71
- };
72
-
73
68
  /**
74
69
  * Formats parsha as a string
75
70
  */
@@ -101,6 +96,12 @@ declare module '@hebcal/leyning' {
101
96
  * e.g. `Genesis 21:1-34; Numbers 29:1-6`.
102
97
  */
103
98
  export function makeSummaryFromParts(parts: Aliyah | Aliyah[]): string;
99
+ export type SpecialReading = {
100
+ aliyot: AliyotMap;
101
+ reason: StringMap;
102
+ haft: Aliyah | Aliyah[];
103
+ seph?: Aliyah | Aliyah[];
104
+ };
104
105
  /**
105
106
  * Determines if the regular parashat haShavua coincides with an event that requires
106
107
  * a special maftir or Haftara (for example Shabbat HaGadol, Shabbat Chanukah, Rosh
@@ -112,7 +113,7 @@ declare module '@hebcal/leyning' {
112
113
  * If a special Haftarah applies, returns the Haftarah object and sets `reason.haftara`.
113
114
  * If no special Haftarah, returns `undefined`
114
115
  */
115
- export function specialReadings(hd: HDate, il: boolean, aliyot: AliyotMap, reason: StringMap, parsha: string[], wantSeph: boolean): Aliyah | Aliyah[] | HaftaraAshkSeph;
116
+ export function specialReadings2(parsha: string[], hd: HDate, il: boolean, aliyot: AliyotMap): SpecialReading;
116
117
  /**
117
118
  * Looks up leyning for a regular Shabbat, Monday/Thursday weekday or holiday.
118
119
  *
@@ -178,6 +179,13 @@ declare module '@hebcal/leyning' {
178
179
  */
179
180
  export function getLeyningForParsha(parsha: string|string[]): Leyning;
180
181
 
182
+ /**
183
+ * Looks up Monday/Thursday aliyot for a regular parsha
184
+ * @param parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
185
+ * @returns map of aliyot
186
+ */
187
+ export function getWeekdayReading(parsha: string|string[]): AliyotMap;
188
+
181
189
  /**
182
190
  * Formats an aliyah object like "Numbers 28:9 - 28:15"
183
191
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hebcal/leyning",
3
- "version": "6.2.3",
3
+ "version": "7.0.0",
4
4
  "author": "Michael J. Radwin (https://github.com/mjradwin)",
5
5
  "keywords": [
6
6
  "hebcal",
@@ -14,6 +14,10 @@
14
14
  "description": "Torah Reading API for Parashat HaShavua and holidays",
15
15
  "main": "./dist/index.js",
16
16
  "module": "./dist/index.mjs",
17
+ "exports": {
18
+ "import": "./dist/index.mjs",
19
+ "require": "./dist/index.js"
20
+ },
17
21
  "repository": {
18
22
  "type": "git",
19
23
  "url": "https://github.com/hebcal/hebcal-leyning.git"
@@ -31,7 +35,7 @@
31
35
  "leyning-csv": "bin/leyning-csv"
32
36
  },
33
37
  "dependencies": {
34
- "@hebcal/core": "^3.46.1"
38
+ "@hebcal/core": "^3.47.1"
35
39
  },
36
40
  "scripts": {
37
41
  "build": "rollup -c",
@@ -42,30 +46,23 @@
42
46
  },
43
47
  "license": "BSD-2-Clause",
44
48
  "ava": {
45
- "files": [
46
- "src/**/*.spec.js"
47
- ],
48
- "require": [
49
- "@babel/register"
50
- ],
51
- "inherit": true,
52
- "verbose": true
49
+ "require": ["@babel/register"]
53
50
  },
54
51
  "devDependencies": {
55
- "@babel/core": "^7.20.2",
52
+ "@babel/core": "^7.20.5",
56
53
  "@babel/preset-env": "^7.20.2",
57
54
  "@babel/register": "^7.18.9",
58
- "@rollup/plugin-babel": "^6.0.2",
59
- "@rollup/plugin-commonjs": "^23.0.2",
60
- "@rollup/plugin-json": "^5.0.1",
55
+ "@rollup/plugin-babel": "^6.0.3",
56
+ "@rollup/plugin-commonjs": "^23.0.7",
57
+ "@rollup/plugin-json": "^6.0.0",
61
58
  "@rollup/plugin-node-resolve": "^15.0.1",
62
- "@rollup/plugin-terser": "^0.1.0",
59
+ "@rollup/plugin-terser": "^0.2.0",
63
60
  "ava": "^5.1.0",
64
61
  "core-js": "^3.26.1",
65
- "eslint": "^8.28.0",
62
+ "eslint": "^8.30.0",
66
63
  "eslint-config-google": "^0.14.0",
67
64
  "jsdoc": "^4.0.0",
68
- "jsdoc-to-markdown": "^7.1.1",
69
- "rollup": "^3.4.0"
65
+ "jsdoc-to-markdown": "^8.0.0",
66
+ "rollup": "^3.7.5"
70
67
  }
71
68
  }