@hebcal/core 6.11.1 → 6.13.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 (91) hide show
  1. package/dist/bundle.js +1682 -1915
  2. package/dist/bundle.js.map +1 -1
  3. package/dist/bundle.min.js +18 -19
  4. package/dist/bundle.min.js.map +1 -1
  5. package/dist/esm/DailyLearning.js +5 -15
  6. package/dist/esm/DailyLearning.js.map +1 -1
  7. package/dist/esm/HebrewDateEvent.d.ts +0 -4
  8. package/dist/esm/HebrewDateEvent.js +2 -6
  9. package/dist/esm/HebrewDateEvent.js.map +1 -1
  10. package/dist/esm/HolidayEvent.js +6 -10
  11. package/dist/esm/HolidayEvent.js.map +1 -1
  12. package/dist/esm/MevarchimChodeshEvent.js +2 -2
  13. package/dist/esm/MevarchimChodeshEvent.js.map +1 -1
  14. package/dist/esm/ParshaEvent.js +4 -4
  15. package/dist/esm/ParshaEvent.js.map +1 -1
  16. package/dist/esm/TimedEvent.js +4 -5
  17. package/dist/esm/TimedEvent.js.map +1 -1
  18. package/dist/esm/YomKippurKatanEvent.js +2 -2
  19. package/dist/esm/YomKippurKatanEvent.js.map +1 -1
  20. package/dist/esm/ashkenazi.po.js +1 -1
  21. package/dist/esm/calendar.js +7 -40
  22. package/dist/esm/calendar.js.map +1 -1
  23. package/dist/esm/candles.d.ts +3 -5
  24. package/dist/esm/candles.js +6 -20
  25. package/dist/esm/candles.js.map +1 -1
  26. package/dist/esm/cities.json.js +1 -1
  27. package/dist/esm/event.js +4 -6
  28. package/dist/esm/event.js.map +1 -1
  29. package/dist/esm/getStartAndEnd.d.ts +1 -1
  30. package/dist/esm/getStartAndEnd.js +8 -9
  31. package/dist/esm/getStartAndEnd.js.map +1 -1
  32. package/dist/esm/hallel.d.ts +1 -3
  33. package/dist/esm/hallel.js +2 -4
  34. package/dist/esm/hallel.js.map +1 -1
  35. package/dist/esm/he-x-NoNikud.po.d.ts +1 -0
  36. package/dist/esm/he-x-NoNikud.po.js +2 -2
  37. package/dist/esm/he-x-NoNikud.po.js.map +1 -1
  38. package/dist/esm/he.po.d.ts +1 -0
  39. package/dist/esm/he.po.js +2 -2
  40. package/dist/esm/he.po.js.map +1 -1
  41. package/dist/esm/hebcal.js +6 -12
  42. package/dist/esm/hebcal.js.map +1 -1
  43. package/dist/esm/holidays.d.ts +1 -1
  44. package/dist/esm/holidays.js +111 -131
  45. package/dist/esm/holidays.js.map +1 -1
  46. package/dist/esm/index.js +1 -1
  47. package/dist/esm/isAssurBemlacha.js +5 -18
  48. package/dist/esm/isAssurBemlacha.js.map +1 -1
  49. package/dist/esm/isAveilut.js +2 -5
  50. package/dist/esm/isAveilut.js.map +1 -1
  51. package/dist/esm/isFastDay.js +3 -4
  52. package/dist/esm/isFastDay.js.map +1 -1
  53. package/dist/esm/locale.js +1 -1
  54. package/dist/esm/location.js +2 -7
  55. package/dist/esm/location.js.map +1 -1
  56. package/dist/esm/modern.d.ts +8 -13
  57. package/dist/esm/modern.js +142 -17
  58. package/dist/esm/modern.js.map +1 -1
  59. package/dist/esm/molad.js +2 -2
  60. package/dist/esm/molad.js.map +1 -1
  61. package/dist/esm/moladBase.js +2 -3
  62. package/dist/esm/moladBase.js.map +1 -1
  63. package/dist/esm/moladDate.js +1 -1
  64. package/dist/esm/moladDate.js.map +1 -1
  65. package/dist/esm/omer.js +22 -28
  66. package/dist/esm/omer.js.map +1 -1
  67. package/dist/esm/parshaName.d.ts +1 -1
  68. package/dist/esm/parshaName.js +3 -4
  69. package/dist/esm/parshaName.js.map +1 -1
  70. package/dist/esm/parshaYear.js +1 -1
  71. package/dist/esm/pkgVersion.d.ts +1 -1
  72. package/dist/esm/pkgVersion.js +2 -2
  73. package/dist/esm/pkgVersion.js.map +1 -1
  74. package/dist/esm/reformatTimeStr.js +17 -16
  75. package/dist/esm/reformatTimeStr.js.map +1 -1
  76. package/dist/esm/sedra.d.ts +0 -2
  77. package/dist/esm/sedra.js +19 -28
  78. package/dist/esm/sedra.js.map +1 -1
  79. package/dist/esm/sefira.json.js +1 -1
  80. package/dist/esm/staticHolidays.d.ts +8 -14
  81. package/dist/esm/staticHolidays.js +179 -470
  82. package/dist/esm/staticHolidays.js.map +1 -1
  83. package/dist/esm/string.js +1 -1
  84. package/dist/esm/tachanun.js +2 -6
  85. package/dist/esm/tachanun.js.map +1 -1
  86. package/dist/esm/zmanim.d.ts +0 -2
  87. package/dist/esm/zmanim.js +19 -22
  88. package/dist/esm/zmanim.js.map +1 -1
  89. package/package.json +7 -7
  90. package/po/he-x-NoNikud.po +3 -0
  91. package/po/he.po +3 -0
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  const cals = new Map();
3
3
  /**
4
4
  * Plug-in registry for daily learning calendars such as Daf Yomi (Bavli),
@@ -38,10 +38,7 @@ class DailyLearning {
38
38
  if (typeof calendar !== 'function') {
39
39
  throw new TypeError(`Invalid calendar function: ${calendar}`);
40
40
  }
41
- cals.set(name.toLowerCase(), {
42
- fn: calendar,
43
- startDate: startDate,
44
- });
41
+ cals.set(name.toLowerCase(), { fn: calendar, startDate });
45
42
  }
46
43
  /**
47
44
  * Returns the learning event for the given date from the named calendar,
@@ -57,10 +54,7 @@ class DailyLearning {
57
54
  */
58
55
  static lookup(name, hd, il) {
59
56
  const cal = cals.get(name.toLowerCase());
60
- if (typeof cal === 'object') {
61
- return cal.fn(hd, il);
62
- }
63
- return null;
57
+ return cal ? cal.fn(hd, il) : null;
64
58
  }
65
59
  /**
66
60
  * Returns the first Hebrew date for which the named learning calendar
@@ -69,11 +63,7 @@ class DailyLearning {
69
63
  * @param name case insensitive
70
64
  */
71
65
  static getStartDate(name) {
72
- const cal = cals.get(name.toLowerCase());
73
- if (typeof cal === 'object') {
74
- return cal.startDate;
75
- }
76
- return undefined;
66
+ return cals.get(name.toLowerCase())?.startDate;
77
67
  }
78
68
  /**
79
69
  * Returns `true` if a learning calendar with the given name has been
@@ -88,7 +78,7 @@ class DailyLearning {
88
78
  * calendars.
89
79
  */
90
80
  static getCalendars() {
91
- return Array.from(cals.keys());
81
+ return [...cals.keys()];
92
82
  }
93
83
  }
94
84
 
@@ -1 +1 @@
1
- {"version":3,"file":"DailyLearning.js","sources":["../../../src/DailyLearning.ts"],"sourcesContent":["import {HDate} from '@hebcal/hdate';\nimport {Event} from './event.js';\n\ntype LearningCalendar = {\n fn: (hd: HDate, il: boolean) => Event | null;\n startDate?: HDate;\n};\nconst cals = new Map<string, LearningCalendar>();\n\n/**\n * Plug-in registry for daily learning calendars such as Daf Yomi (Bavli),\n * Yerushalmi Yomi, Mishna Yomi, Nach Yomi, etc.\n *\n * `@hebcal/core` itself contains no learning schedules — they are provided\n * by the {@link https://github.com/hebcal/hebcal-learning @hebcal/learning}\n * package, which calls {@link DailyLearning.addCalendar} on import. After\n * `@hebcal/learning` is loaded, `calendar()` will emit\n * learning events when the corresponding `options.dailyLearning` flag is set.\n *\n * @example\n * import '@hebcal/learning';\n * import {DailyLearning, HDate} from '@hebcal/core';\n *\n * const ev = DailyLearning.lookup('dafYomi', new HDate(), false);\n * console.log(ev?.render('en')); // e.g. 'Daf Yomi: Berakhot 2'\n */\nexport class DailyLearning {\n /**\n * Registers a new learning calendar.\n *\n * The provided function is called whenever a caller asks for an event\n * from this calendar; if no learning occurs that day (e.g. the date is\n * before the cycle's start) it should return `null`.\n * @example\n * DailyLearning.addCalendar(\n * 'myCalendar',\n * (hd, il) => new Event(hd, 'Today\\'s learning', 0),\n * new HDate(1, 'Tishrei', 5780),\n * );\n * @param name case insensitive\n * @param calendar a function that returns an `Event` or `null`\n * @param startDate the first date for which this calendar is valid\n */\n static addCalendar(\n name: string,\n calendar: (hd: HDate, il: boolean) => Event | null,\n startDate?: HDate\n ) {\n if (typeof calendar !== 'function') {\n throw new TypeError(`Invalid calendar function: ${calendar}`);\n }\n cals.set(name.toLowerCase(), {\n fn: calendar,\n startDate: startDate,\n });\n }\n\n /**\n * Returns the learning event for the given date from the named calendar,\n * or `null` if there is no learning that day (or the named calendar is\n * not registered).\n * @example\n * import '@hebcal/learning';\n * import {DailyLearning, HDate, months} from '@hebcal/core';\n * DailyLearning.lookup('dafYomi', new HDate(15, months.CHESHVAN, 5784), false);\n * @param name case insensitive\n * @param hd Hebrew Date\n * @param il true for Israel, false for Diaspora\n */\n static lookup(name: string, hd: HDate, il: boolean): Event | null {\n const cal = cals.get(name.toLowerCase());\n if (typeof cal === 'object') {\n return cal.fn(hd, il);\n }\n return null;\n }\n\n /**\n * Returns the first Hebrew date for which the named learning calendar\n * is valid (as registered by {@link addCalendar}), or `undefined` if the\n * calendar was not registered with a start date or is not registered at all.\n * @param name case insensitive\n */\n static getStartDate(name: string): HDate | undefined {\n const cal = cals.get(name.toLowerCase());\n if (typeof cal === 'object') {\n return cal.startDate;\n }\n return undefined;\n }\n\n /**\n * Returns `true` if a learning calendar with the given name has been\n * registered via {@link addCalendar}.\n * @param name case insensitive\n */\n static has(name: string): boolean {\n return cals.has(name.toLowerCase());\n }\n\n /**\n * Returns the (lower-cased) names of all currently-registered learning\n * calendars.\n */\n static getCalendars(): string[] {\n return Array.from(cals.keys());\n }\n}\n"],"names":[],"mappings":";AAOA,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B;AAEhD;;;;;;;;;;;;;;;;AAgBG;MACU,aAAa,CAAA;AACxB;;;;;;;;;;;;;;;AAeG;AACH,IAAA,OAAO,WAAW,CAChB,IAAY,EACZ,QAAkD,EAClD,SAAiB,EAAA;AAEjB,QAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,YAAA,MAAM,IAAI,SAAS,CAAC,8BAA8B,QAAQ,CAAA,CAAE,CAAC;QAC/D;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC3B,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,SAAS,EAAE,SAAS;AACrB,SAAA,CAAC;IACJ;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,OAAO,MAAM,CAAC,IAAY,EAAE,EAAS,EAAE,EAAW,EAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACvB;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;IACH,OAAO,YAAY,CAAC,IAAY,EAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,OAAO,GAAG,CAAC,SAAS;QACtB;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;AAIG;IACH,OAAO,GAAG,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC;AAEA;;;AAGG;AACH,IAAA,OAAO,YAAY,GAAA;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC;AACD;;"}
1
+ {"version":3,"file":"DailyLearning.js","sources":["../../../src/DailyLearning.ts"],"sourcesContent":["import {HDate} from '@hebcal/hdate';\nimport {Event} from './event.js';\n\ntype LearningCalendar = {\n fn: (hd: HDate, il: boolean) => Event | null;\n startDate?: HDate;\n};\nconst cals = new Map<string, LearningCalendar>();\n\n/**\n * Plug-in registry for daily learning calendars such as Daf Yomi (Bavli),\n * Yerushalmi Yomi, Mishna Yomi, Nach Yomi, etc.\n *\n * `@hebcal/core` itself contains no learning schedules — they are provided\n * by the {@link https://github.com/hebcal/hebcal-learning @hebcal/learning}\n * package, which calls {@link DailyLearning.addCalendar} on import. After\n * `@hebcal/learning` is loaded, `calendar()` will emit\n * learning events when the corresponding `options.dailyLearning` flag is set.\n *\n * @example\n * import '@hebcal/learning';\n * import {DailyLearning, HDate} from '@hebcal/core';\n *\n * const ev = DailyLearning.lookup('dafYomi', new HDate(), false);\n * console.log(ev?.render('en')); // e.g. 'Daf Yomi: Berakhot 2'\n */\nexport class DailyLearning {\n /**\n * Registers a new learning calendar.\n *\n * The provided function is called whenever a caller asks for an event\n * from this calendar; if no learning occurs that day (e.g. the date is\n * before the cycle's start) it should return `null`.\n * @example\n * DailyLearning.addCalendar(\n * 'myCalendar',\n * (hd, il) => new Event(hd, 'Today\\'s learning', 0),\n * new HDate(1, 'Tishrei', 5780),\n * );\n * @param name case insensitive\n * @param calendar a function that returns an `Event` or `null`\n * @param startDate the first date for which this calendar is valid\n */\n static addCalendar(\n name: string,\n calendar: (hd: HDate, il: boolean) => Event | null,\n startDate?: HDate\n ) {\n if (typeof calendar !== 'function') {\n throw new TypeError(`Invalid calendar function: ${calendar}`);\n }\n cals.set(name.toLowerCase(), {fn: calendar, startDate});\n }\n\n /**\n * Returns the learning event for the given date from the named calendar,\n * or `null` if there is no learning that day (or the named calendar is\n * not registered).\n * @example\n * import '@hebcal/learning';\n * import {DailyLearning, HDate, months} from '@hebcal/core';\n * DailyLearning.lookup('dafYomi', new HDate(15, months.CHESHVAN, 5784), false);\n * @param name case insensitive\n * @param hd Hebrew Date\n * @param il true for Israel, false for Diaspora\n */\n static lookup(name: string, hd: HDate, il: boolean): Event | null {\n const cal = cals.get(name.toLowerCase());\n return cal ? cal.fn(hd, il) : null;\n }\n\n /**\n * Returns the first Hebrew date for which the named learning calendar\n * is valid (as registered by {@link addCalendar}), or `undefined` if the\n * calendar was not registered with a start date or is not registered at all.\n * @param name case insensitive\n */\n static getStartDate(name: string): HDate | undefined {\n return cals.get(name.toLowerCase())?.startDate;\n }\n\n /**\n * Returns `true` if a learning calendar with the given name has been\n * registered via {@link addCalendar}.\n * @param name case insensitive\n */\n static has(name: string): boolean {\n return cals.has(name.toLowerCase());\n }\n\n /**\n * Returns the (lower-cased) names of all currently-registered learning\n * calendars.\n */\n static getCalendars(): string[] {\n return [...cals.keys()];\n }\n}\n"],"names":[],"mappings":";AAOA,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B;AAEhD;;;;;;;;;;;;;;;;AAgBG;MACU,aAAa,CAAA;AACxB;;;;;;;;;;;;;;;AAeG;AACH,IAAA,OAAO,WAAW,CAChB,IAAY,EACZ,QAAkD,EAClD,SAAiB,EAAA;AAEjB,QAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,YAAA,MAAM,IAAI,SAAS,CAAC,8BAA8B,QAAQ,CAAA,CAAE,CAAC;QAC/D;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC;IACzD;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,OAAO,MAAM,CAAC,IAAY,EAAE,EAAS,EAAE,EAAW,EAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAA,OAAO,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI;IACpC;AAEA;;;;;AAKG;IACH,OAAO,YAAY,CAAC,IAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS;IAChD;AAEA;;;;AAIG;IACH,OAAO,GAAG,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC;AAEA;;;AAGG;AACH,IAAA,OAAO,YAAY,GAAA;AACjB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB;AACD;;"}
@@ -18,10 +18,6 @@ export declare class HebrewDateEvent extends Event {
18
18
  * console.log(ev.render('he')); // 'ט״ו חֶשְׁוָן תשס״ט'
19
19
  */
20
20
  render(locale?: string): string;
21
- /**
22
- * @private
23
- * @param locale
24
- */
25
21
  private renderBriefHebrew;
26
22
  /**
27
23
  * @param [locale] Optional locale name (defaults to empty locale)
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import { Locale, gematriya, months } from '@hebcal/hdate';
3
3
  import { Event, flags } from './event.js';
4
4
  import './locale.js';
@@ -35,15 +35,11 @@ class HebrewDateEvent extends Event {
35
35
  return hd.render(locale0, true);
36
36
  }
37
37
  }
38
- /**
39
- * @private
40
- * @param locale
41
- */
42
38
  renderBriefHebrew(locale) {
43
39
  const hd = this.getDate();
44
40
  const dd = hd.getDate();
45
41
  const mm = Locale.gettext(hd.getMonthName(), locale);
46
- return gematriya(dd) + ' ' + mm;
42
+ return `${gematriya(dd)} ${mm}`;
47
43
  }
48
44
  /**
49
45
  * @param [locale] Optional locale name (defaults to empty locale)
@@ -1 +1 @@
1
- {"version":3,"file":"HebrewDateEvent.js","sources":["../../../src/HebrewDateEvent.ts"],"sourcesContent":["import {HDate, gematriya, months, Locale} from '@hebcal/hdate';\nimport {Event, flags} from './event.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\n/** Daily Hebrew date (\"11th of Sivan, 5780\") */\nexport class HebrewDateEvent extends Event {\n /**\n * @param date\n */\n constructor(date: HDate) {\n super(date, date.toString(), flags.HEBREW_DATE);\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n * @example\n * import {HDate, HebrewDateEvent, months} from '@hebcal/core';\n *\n * const hd = new HDate(15, months.CHESHVAN, 5769);\n * const ev = new HebrewDateEvent(hd);\n * console.log(ev.render('en')); // '15th of Cheshvan, 5769'\n * console.log(ev.render('he')); // 'ט״ו חֶשְׁוָן תשס״ט'\n */\n render(locale?: string): string {\n const locale1 = locale?.toLowerCase();\n const locale0 = locale1 ?? 'en';\n const hd = this.getDate();\n switch (locale0) {\n case 'h':\n case 'he':\n return hd.renderGematriya(false);\n case 'he-x-nonikud':\n return hd.renderGematriya(true);\n default:\n return hd.render(locale0, true);\n }\n }\n /**\n * @private\n * @param locale\n */\n private renderBriefHebrew(locale: string): string {\n const hd = this.getDate();\n const dd = hd.getDate();\n const mm = Locale.gettext(hd.getMonthName(), locale);\n return gematriya(dd) + ' ' + mm;\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n * @example\n * import {HDate, HebrewDateEvent, months} from '@hebcal/core';\n *\n * const hd = new HDate(15, months.CHESHVAN, 5769);\n * const ev = new HebrewDateEvent(hd);\n * console.log(ev.renderBrief()); // '15th of Cheshvan'\n * console.log(ev.renderBrief('he')); // 'ט״ו חֶשְׁוָן'\n */\n renderBrief(locale?: string): string {\n const locale1 = locale?.toLowerCase();\n const locale0 = locale1 ?? 'en';\n const hd = this.getDate();\n if (hd.getMonth() === months.TISHREI && hd.getDate() === 1) {\n return this.render(locale0);\n }\n switch (locale0) {\n case 'h':\n case 'he':\n case 'he-x-nonikud':\n return this.renderBriefHebrew(locale0);\n default:\n return hd.render(locale0, false);\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAIA;AACM,MAAO,eAAgB,SAAQ,KAAK,CAAA;AACxC;;AAEG;AACH,IAAA,WAAA,CAAY,IAAW,EAAA;AACrB,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC;IACjD;AACA;;;;;;;;;AASG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACzB,QAAQ,OAAO;AACb,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;AAClC,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;AACjC,YAAA;gBACE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;;IAErC;AACA;;;AAGG;AACK,IAAA,iBAAiB,CAAC,MAAc,EAAA;AACtC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACzB,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;AACvB,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC;QACpD,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE;IACjC;AACA;;;;;;;;;AASG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B;QACA,QAAQ,OAAO;AACb,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACxC,YAAA;gBACE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;;IAEtC;AACD;;"}
1
+ {"version":3,"file":"HebrewDateEvent.js","sources":["../../../src/HebrewDateEvent.ts"],"sourcesContent":["import {HDate, gematriya, months, Locale} from '@hebcal/hdate';\nimport {Event, flags} from './event.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\n/** Daily Hebrew date (\"11th of Sivan, 5780\") */\nexport class HebrewDateEvent extends Event {\n /**\n * @param date\n */\n constructor(date: HDate) {\n super(date, date.toString(), flags.HEBREW_DATE);\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n * @example\n * import {HDate, HebrewDateEvent, months} from '@hebcal/core';\n *\n * const hd = new HDate(15, months.CHESHVAN, 5769);\n * const ev = new HebrewDateEvent(hd);\n * console.log(ev.render('en')); // '15th of Cheshvan, 5769'\n * console.log(ev.render('he')); // 'ט״ו חֶשְׁוָן תשס״ט'\n */\n render(locale?: string): string {\n const locale1 = locale?.toLowerCase();\n const locale0 = locale1 ?? 'en';\n const hd = this.getDate();\n switch (locale0) {\n case 'h':\n case 'he':\n return hd.renderGematriya(false);\n case 'he-x-nonikud':\n return hd.renderGematriya(true);\n default:\n return hd.render(locale0, true);\n }\n }\n private renderBriefHebrew(locale: string): string {\n const hd = this.getDate();\n const dd = hd.getDate();\n const mm = Locale.gettext(hd.getMonthName(), locale);\n return `${gematriya(dd)} ${mm}`;\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n * @example\n * import {HDate, HebrewDateEvent, months} from '@hebcal/core';\n *\n * const hd = new HDate(15, months.CHESHVAN, 5769);\n * const ev = new HebrewDateEvent(hd);\n * console.log(ev.renderBrief()); // '15th of Cheshvan'\n * console.log(ev.renderBrief('he')); // 'ט״ו חֶשְׁוָן'\n */\n renderBrief(locale?: string): string {\n const locale1 = locale?.toLowerCase();\n const locale0 = locale1 ?? 'en';\n const hd = this.getDate();\n if (hd.getMonth() === months.TISHREI && hd.getDate() === 1) {\n return this.render(locale0);\n }\n switch (locale0) {\n case 'h':\n case 'he':\n case 'he-x-nonikud':\n return this.renderBriefHebrew(locale0);\n default:\n return hd.render(locale0, false);\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAIA;AACM,MAAO,eAAgB,SAAQ,KAAK,CAAA;AACxC;;AAEG;AACH,IAAA,WAAA,CAAY,IAAW,EAAA;AACrB,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC;IACjD;AACA;;;;;;;;;AASG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACzB,QAAQ,OAAO;AACb,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;AAClC,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;AACjC,YAAA;gBACE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;;IAErC;AACQ,IAAA,iBAAiB,CAAC,MAAc,EAAA;AACtC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACzB,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;AACvB,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC;QACpD,OAAO,CAAA,EAAG,SAAS,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,EAAE,EAAE;IACjC;AACA;;;;;;;;;AASG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,WAAW,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B;QACA,QAAQ,OAAO;AACb,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACxC,YAAA;gBACE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;;IAEtC;AACD;;"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import { isoDateString, Locale } from '@hebcal/hdate';
3
3
  import { Event, flags } from './event.js';
4
4
  import { holidayDesc } from './staticHolidays.js';
@@ -70,19 +70,15 @@ class HolidayEvent extends Event {
70
70
  if (year < 100 || year > 2999) {
71
71
  return undefined;
72
72
  }
73
- const url = 'https://www.hebcal.com/holidays/' +
74
- urlFriendly(this.basename()) +
75
- '-' +
76
- this.urlDateSuffix();
77
- return this.hasFlag('IL_ONLY') ? url + '?i=on' : url;
73
+ const url = `https://www.hebcal.com/holidays/${urlFriendly(this.basename())}-${this.urlDateSuffix()}`;
74
+ return this.hasFlag('IL_ONLY') ? `${url}?i=on` : url;
78
75
  }
79
76
  /**
80
77
  * The date portion of {@link url}. For most holidays this is just the
81
78
  * Gregorian year; subclasses override it when a year alone is ambiguous.
82
79
  */
83
80
  urlDateSuffix() {
84
- const year = this.greg().getFullYear();
85
- return String(year);
81
+ return String(this.greg().getFullYear());
86
82
  }
87
83
  getEmoji() {
88
84
  if (this.emoji) {
@@ -205,7 +201,7 @@ class RoshHashanaEvent extends HolidayEvent {
205
201
  * @param [locale] Optional locale name (defaults to empty locale)
206
202
  */
207
203
  render(locale) {
208
- return Locale.gettext('Rosh Hashana', locale) + ' ' + this.hyear;
204
+ return `${Locale.gettext('Rosh Hashana', locale)} ${this.hyear}`;
209
205
  }
210
206
  getEmoji() {
211
207
  return '🍏🍯';
@@ -230,7 +226,7 @@ class RoshChodeshEvent extends HolidayEvent {
230
226
  const monthName = this.getDesc().substring(roshChodeshStr.length + 1);
231
227
  const monthName0 = Locale.gettext(monthName, locale);
232
228
  const monthName1 = smartApostrophe(monthName0);
233
- return Locale.gettext(roshChodeshStr, locale) + ' ' + monthName1;
229
+ return `${Locale.gettext(roshChodeshStr, locale)} ${monthName1}`;
234
230
  }
235
231
  basename() {
236
232
  return this.getDesc();
@@ -1 +1 @@
1
- {"version":3,"file":"HolidayEvent.js","sources":["../../../src/HolidayEvent.ts"],"sourcesContent":["import {HDate, Locale, isoDateString} from '@hebcal/hdate';\nimport {Event, flags} from './event.js';\nimport {holidayDesc as hdesc} from './staticHolidays.js';\nimport {smartApostrophe, urlFriendly} from './string.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\n/**\n * Represents a built-in holiday like Pesach, Purim or Tu BiShvat.\n *\n * Most holiday-related events emitted by {@link calendar}\n * are instances of `HolidayEvent` or one of its subclasses\n * ({@link ChanukahEvent}, {@link AsaraBTevetEvent},\n * {@link RoshHashanaEvent}, {@link RoshChodeshEvent}).\n *\n * Adds two notable behaviors over the base {@link Event}:\n *\n * - {@link HolidayEvent.basename} strips qualifiers like `Erev `, ` I`/`II`,\n * `(CH''M)`, `(observed)`, candle counts, etc. (e.g. `\"Erev Pesach\"` →\n * `\"Pesach\"`).\n * - {@link HolidayEvent.url} returns a `https://www.hebcal.com/holidays/...`\n * link for the holiday.\n */\nexport class HolidayEvent extends Event {\n /** During Sukkot or Pesach */\n readonly cholHaMoedDay?: number;\n /**\n * `true` if the fast day was postponed a day to avoid Shabbat.\n * - Tish'a B'Av postponed from the 9th to the 10th\n * - Tzom Tammuz postponed from the 17th to the 18th\n */\n readonly observed?: boolean;\n constructor(date: HDate, desc: string, mask = 0, attrs?: object) {\n super(date, desc, mask, attrs);\n if (typeof attrs === 'object' && attrs !== null) {\n Object.assign(this, attrs);\n }\n }\n\n /**\n * Returns a simplified (untranslated) name for this holiday, stripping\n * qualifiers so that related events group under one name.\n *\n * Strips trailing 4-digit years, `(CH''M)`, `(observed)`, `(Hoshana Raba)`,\n * Roman-numeral day numbers (` I`, ` II`, ...), Chanukah candle counts,\n * `: 8th Day`, and a leading `\"Erev \"`.\n * @example\n * // 'Erev Pesach' => 'Pesach'\n * // 'Sukkot III (CH''M)' => 'Sukkot'\n * // 'Chanukah: 5 Candles' => 'Chanukah'\n * // 'Rosh Hashana 5784' => 'Rosh Hashana'\n */\n basename(): string {\n return this.getDesc()\n .replace(/ \\d{4}$/, '')\n .replace(/ \\(CH''M\\)$/, '')\n .replace(/ \\(observed\\)$/, '')\n .replace(/ \\(Hoshana Raba\\)$/, '')\n .replace(/ [IV]+$/, '')\n .replace(/: \\d Candles?$/, '')\n .replace(/: 8th Day$/, '')\n .replace(/^Erev /, '');\n }\n\n /**\n * Returns a `https://www.hebcal.com/holidays/...` URL for more detail on\n * this holiday. Israel-only holidays get an `?i=on` query parameter.\n * Returns `undefined` for years outside `[100, 2999]`.\n */\n url(): string | undefined {\n const year = this.greg().getFullYear();\n if (year < 100 || year > 2999) {\n return undefined;\n }\n const url =\n 'https://www.hebcal.com/holidays/' +\n urlFriendly(this.basename()) +\n '-' +\n this.urlDateSuffix();\n return this.hasFlag('IL_ONLY') ? url + '?i=on' : url;\n }\n\n /**\n * The date portion of {@link url}. For most holidays this is just the\n * Gregorian year; subclasses override it when a year alone is ambiguous.\n */\n urlDateSuffix(): string {\n const year = this.greg().getFullYear();\n return String(year);\n }\n\n getEmoji(): string {\n if (this.emoji) {\n return this.emoji;\n }\n if (this.hasFlag('SPECIAL_SHABBAT')) {\n return '🕍';\n }\n return '✡️';\n }\n\n getCategories(): string[] {\n if (this.cholHaMoedDay) {\n return ['holiday', 'major', 'cholhamoed'];\n }\n const cats = super.getCategories();\n if (cats[0] !== 'unknown') {\n return cats;\n }\n // Don't depend on flags.MINOR_HOLIDAY always being set. Look for minor holidays.\n const desc = this.getDesc();\n switch (desc) {\n case hdesc.LAG_BAOMER:\n case hdesc.LEIL_SELICHOT:\n case hdesc.PESACH_SHENI:\n case hdesc.EREV_PURIM:\n case hdesc.PURIM_KATAN:\n case hdesc.SHUSHAN_PURIM:\n case hdesc.TU_BAV:\n case hdesc.TU_BISHVAT:\n case hdesc.ROSH_HASHANA_LABEHEMOT:\n return ['holiday', 'minor'];\n }\n\n return ['holiday', 'major'];\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const str = super.render(locale);\n return smartApostrophe(str);\n }\n /**\n * Returns a brief (translated) description of this event.\n * For most events, this is the same as render(). For some events, it procudes\n * a shorter text (e.g. without a time or added description).\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n const str = super.renderBrief(locale);\n return smartApostrophe(str);\n }\n}\n\n/**\n * Because Asara B'Tevet often occurs twice in the same Gregorian year,\n * we subclass HolidayEvent to generate the correct URL.\n */\nexport class AsaraBTevetEvent extends HolidayEvent {\n /** Full `YYYYMMDD` date, since the Gregorian year alone is ambiguous here */\n urlDateSuffix(): string {\n const isoDate = isoDateString(this.greg());\n return isoDate.replaceAll('-', '');\n }\n}\n\nconst chanukahEmoji = '🕎';\nconst KEYCAP_DIGITS = [\n '0️⃣',\n '1️⃣',\n '2️⃣',\n '3️⃣',\n '4️⃣',\n '5️⃣',\n '6️⃣',\n '7️⃣',\n '8️⃣',\n '9️⃣',\n] as const;\n\n/**\n * Because Chanukah sometimes starts in December and ends in January,\n * we subclass HolidayEvent to generate the correct URL.\n */\nexport class ChanukahEvent extends HolidayEvent {\n readonly chanukahDay?: number;\n /**\n * @param chanukahDay should be undefined for 1st night of Chanukah\n */\n constructor(date: HDate, desc: string, mask: number, chanukahDay?: number) {\n super(date, desc, mask);\n this.chanukahDay = chanukahDay;\n this.emoji = chanukahEmoji;\n if (chanukahDay !== 8) {\n const candles = chanukahDay ? chanukahDay + 1 : 1;\n this.emoji += KEYCAP_DIGITS[candles];\n }\n }\n urlDateSuffix(): string {\n const dt = this.greg();\n let year = dt.getFullYear();\n if (dt.getMonth() === 0) {\n year--;\n }\n return String(year);\n }\n}\n\n/** Represents Rosh Hashana, the Jewish New Year */\nexport class RoshHashanaEvent extends HolidayEvent {\n private readonly hyear: number;\n /**\n * Normally created by {@link calendar} rather than directly.\n * @param date Hebrew date event occurs\n * @param hyear Hebrew year\n * @param mask optional holiday flags\n */\n constructor(date: HDate, hyear: number, mask: number) {\n super(date, `Rosh Hashana ${hyear}`, mask);\n this.hyear = hyear;\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return Locale.gettext('Rosh Hashana', locale) + ' ' + this.hyear;\n }\n\n getEmoji(): string {\n return '🍏🍯';\n }\n}\n\nconst roshChodeshStr = 'Rosh Chodesh';\n\n/** Represents Rosh Chodesh, the beginning of a new month */\nexport class RoshChodeshEvent extends HolidayEvent {\n /**\n * Constructs Rosh Chodesh event\n * @param date Hebrew date event occurs\n * @param monthName Hebrew month name (not translated)\n */\n constructor(date: HDate, monthName: string) {\n super(date, `${roshChodeshStr} ${monthName}`, flags.ROSH_CHODESH);\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const monthName = this.getDesc().substring(roshChodeshStr.length + 1);\n const monthName0 = Locale.gettext(monthName, locale);\n const monthName1 = smartApostrophe(monthName0);\n return Locale.gettext(roshChodeshStr, locale) + ' ' + monthName1;\n }\n\n basename(): string {\n return this.getDesc();\n }\n\n getEmoji(): string {\n return this.emoji || '🌒';\n }\n}\n"],"names":["hdesc"],"mappings":";;;;;;;AAMA;;;;;;;;;;;;;;;AAeG;AACG,MAAO,YAAa,SAAQ,KAAK,CAAA;;AAE5B,IAAA,aAAa;AACtB;;;;AAIG;AACM,IAAA,QAAQ;IACjB,WAAA,CAAY,IAAW,EAAE,IAAY,EAAE,IAAI,GAAG,CAAC,EAAE,KAAc,EAAA;QAC7D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5B;IACF;AAEA;;;;;;;;;;;;AAYG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;AAChB,aAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,aAAA,OAAO,CAAC,aAAa,EAAE,EAAE;AACzB,aAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE;AAC5B,aAAA,OAAO,CAAC,oBAAoB,EAAE,EAAE;AAChC,aAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,aAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE;AAC5B,aAAA,OAAO,CAAC,YAAY,EAAE,EAAE;AACxB,aAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC1B;AAEA;;;;AAIG;IACH,GAAG,GAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAC7B,YAAA,OAAO,SAAS;QAClB;QACA,MAAM,GAAG,GACP,kCAAkC;AAClC,YAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,GAAG;YACH,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG;IACtD;AAEA;;;AAGG;IACH,aAAa,GAAA;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;QAC3C;AACA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,QAAQ,IAAI;YACV,KAAKA,WAAK,CAAC,UAAU;YACrB,KAAKA,WAAK,CAAC,aAAa;YACxB,KAAKA,WAAK,CAAC,YAAY;YACvB,KAAKA,WAAK,CAAC,UAAU;YACrB,KAAKA,WAAK,CAAC,WAAW;YACtB,KAAKA,WAAK,CAAC,aAAa;YACxB,KAAKA,WAAK,CAAC,MAAM;YACjB,KAAKA,WAAK,CAAC,UAAU;YACrB,KAAKA,WAAK,CAAC,sBAAsB;AAC/B,gBAAA,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;;AAG/B,QAAA,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7B;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,QAAA,OAAO,eAAe,CAAC,GAAG,CAAC;IAC7B;AACA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;AACrC,QAAA,OAAO,eAAe,CAAC,GAAG,CAAC;IAC7B;AACD;AAED;;;AAGG;AACG,MAAO,gBAAiB,SAAQ,YAAY,CAAA;;IAEhD,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;IACpC;AACD;AAED,MAAM,aAAa,GAAG,IAAI;AAC1B,MAAM,aAAa,GAAG;IACpB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG;AAEV;;;AAGG;AACG,MAAO,aAAc,SAAQ,YAAY,CAAA;AACpC,IAAA,WAAW;AACpB;;AAEG;AACH,IAAA,WAAA,CAAY,IAAW,EAAE,IAAY,EAAE,IAAY,EAAE,WAAoB,EAAA;AACvE,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa;AAC1B,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC;QACtC;IACF;IACA,aAAa,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE;AAC3B,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACvB,YAAA,IAAI,EAAE;QACR;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB;AACD;AAED;AACM,MAAO,gBAAiB,SAAQ,YAAY,CAAA;AAC/B,IAAA,KAAK;AACtB;;;;;AAKG;AACH,IAAA,WAAA,CAAY,IAAW,EAAE,KAAa,EAAE,IAAY,EAAA;QAClD,KAAK,CAAC,IAAI,EAAE,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,EAAE,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK;IAClE;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,MAAM;IACf;AACD;AAED,MAAM,cAAc,GAAG,cAAc;AAErC;AACM,MAAO,gBAAiB,SAAQ,YAAY,CAAA;AAChD;;;;AAIG;IACH,WAAA,CAAY,IAAW,EAAE,SAAiB,EAAA;AACxC,QAAA,KAAK,CAAC,IAAI,EAAE,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAE,KAAK,CAAC,YAAY,CAAC;IACnE;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;AACpD,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC;AAC9C,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,UAAU;IAClE;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI;IAC3B;AACD;;"}
1
+ {"version":3,"file":"HolidayEvent.js","sources":["../../../src/HolidayEvent.ts"],"sourcesContent":["import {HDate, Locale, isoDateString} from '@hebcal/hdate';\nimport {Event, flags} from './event.js';\nimport {holidayDesc as hdesc} from './staticHolidays.js';\nimport {smartApostrophe, urlFriendly} from './string.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\n/**\n * Represents a built-in holiday like Pesach, Purim or Tu BiShvat.\n *\n * Most holiday-related events emitted by {@link calendar}\n * are instances of `HolidayEvent` or one of its subclasses\n * ({@link ChanukahEvent}, {@link AsaraBTevetEvent},\n * {@link RoshHashanaEvent}, {@link RoshChodeshEvent}).\n *\n * Adds two notable behaviors over the base {@link Event}:\n *\n * - {@link HolidayEvent.basename} strips qualifiers like `Erev `, ` I`/`II`,\n * `(CH''M)`, `(observed)`, candle counts, etc. (e.g. `\"Erev Pesach\"` →\n * `\"Pesach\"`).\n * - {@link HolidayEvent.url} returns a `https://www.hebcal.com/holidays/...`\n * link for the holiday.\n */\nexport class HolidayEvent extends Event {\n /** During Sukkot or Pesach */\n readonly cholHaMoedDay?: number;\n /**\n * `true` if the fast day was postponed a day to avoid Shabbat.\n * - Tish'a B'Av postponed from the 9th to the 10th\n * - Tzom Tammuz postponed from the 17th to the 18th\n */\n readonly observed?: boolean;\n constructor(date: HDate, desc: string, mask = 0, attrs?: object) {\n super(date, desc, mask, attrs);\n if (typeof attrs === 'object' && attrs !== null) {\n Object.assign(this, attrs);\n }\n }\n\n /**\n * Returns a simplified (untranslated) name for this holiday, stripping\n * qualifiers so that related events group under one name.\n *\n * Strips trailing 4-digit years, `(CH''M)`, `(observed)`, `(Hoshana Raba)`,\n * Roman-numeral day numbers (` I`, ` II`, ...), Chanukah candle counts,\n * `: 8th Day`, and a leading `\"Erev \"`.\n * @example\n * // 'Erev Pesach' => 'Pesach'\n * // 'Sukkot III (CH''M)' => 'Sukkot'\n * // 'Chanukah: 5 Candles' => 'Chanukah'\n * // 'Rosh Hashana 5784' => 'Rosh Hashana'\n */\n basename(): string {\n return this.getDesc()\n .replace(/ \\d{4}$/, '')\n .replace(/ \\(CH''M\\)$/, '')\n .replace(/ \\(observed\\)$/, '')\n .replace(/ \\(Hoshana Raba\\)$/, '')\n .replace(/ [IV]+$/, '')\n .replace(/: \\d Candles?$/, '')\n .replace(/: 8th Day$/, '')\n .replace(/^Erev /, '');\n }\n\n /**\n * Returns a `https://www.hebcal.com/holidays/...` URL for more detail on\n * this holiday. Israel-only holidays get an `?i=on` query parameter.\n * Returns `undefined` for years outside `[100, 2999]`.\n */\n url(): string | undefined {\n const year = this.greg().getFullYear();\n if (year < 100 || year > 2999) {\n return undefined;\n }\n const url = `https://www.hebcal.com/holidays/${urlFriendly(this.basename())}-${this.urlDateSuffix()}`;\n return this.hasFlag('IL_ONLY') ? `${url}?i=on` : url;\n }\n\n /**\n * The date portion of {@link url}. For most holidays this is just the\n * Gregorian year; subclasses override it when a year alone is ambiguous.\n */\n urlDateSuffix(): string {\n return String(this.greg().getFullYear());\n }\n\n getEmoji(): string {\n if (this.emoji) {\n return this.emoji;\n }\n if (this.hasFlag('SPECIAL_SHABBAT')) {\n return '🕍';\n }\n return '✡️';\n }\n\n getCategories(): string[] {\n if (this.cholHaMoedDay) {\n return ['holiday', 'major', 'cholhamoed'];\n }\n const cats = super.getCategories();\n if (cats[0] !== 'unknown') {\n return cats;\n }\n // Don't depend on flags.MINOR_HOLIDAY always being set. Look for minor holidays.\n const desc = this.getDesc();\n switch (desc) {\n case hdesc.LAG_BAOMER:\n case hdesc.LEIL_SELICHOT:\n case hdesc.PESACH_SHENI:\n case hdesc.EREV_PURIM:\n case hdesc.PURIM_KATAN:\n case hdesc.SHUSHAN_PURIM:\n case hdesc.TU_BAV:\n case hdesc.TU_BISHVAT:\n case hdesc.ROSH_HASHANA_LABEHEMOT:\n return ['holiday', 'minor'];\n }\n\n return ['holiday', 'major'];\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const str = super.render(locale);\n return smartApostrophe(str);\n }\n /**\n * Returns a brief (translated) description of this event.\n * For most events, this is the same as render(). For some events, it procudes\n * a shorter text (e.g. without a time or added description).\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n const str = super.renderBrief(locale);\n return smartApostrophe(str);\n }\n}\n\n/**\n * Because Asara B'Tevet often occurs twice in the same Gregorian year,\n * we subclass HolidayEvent to generate the correct URL.\n */\nexport class AsaraBTevetEvent extends HolidayEvent {\n /** Full `YYYYMMDD` date, since the Gregorian year alone is ambiguous here */\n urlDateSuffix(): string {\n const isoDate = isoDateString(this.greg());\n return isoDate.replaceAll('-', '');\n }\n}\n\nconst chanukahEmoji = '🕎';\nconst KEYCAP_DIGITS = [\n '0️⃣',\n '1️⃣',\n '2️⃣',\n '3️⃣',\n '4️⃣',\n '5️⃣',\n '6️⃣',\n '7️⃣',\n '8️⃣',\n '9️⃣',\n] as const;\n\n/**\n * Because Chanukah sometimes starts in December and ends in January,\n * we subclass HolidayEvent to generate the correct URL.\n */\nexport class ChanukahEvent extends HolidayEvent {\n readonly chanukahDay?: number;\n /**\n * @param chanukahDay should be undefined for 1st night of Chanukah\n */\n constructor(date: HDate, desc: string, mask: number, chanukahDay?: number) {\n super(date, desc, mask);\n this.chanukahDay = chanukahDay;\n this.emoji = chanukahEmoji;\n if (chanukahDay !== 8) {\n const candles = chanukahDay ? chanukahDay + 1 : 1;\n this.emoji += KEYCAP_DIGITS[candles];\n }\n }\n urlDateSuffix(): string {\n const dt = this.greg();\n let year = dt.getFullYear();\n if (dt.getMonth() === 0) {\n year--;\n }\n return String(year);\n }\n}\n\n/** Represents Rosh Hashana, the Jewish New Year */\nexport class RoshHashanaEvent extends HolidayEvent {\n private readonly hyear: number;\n /**\n * Normally created by {@link calendar} rather than directly.\n * @param date Hebrew date event occurs\n * @param hyear Hebrew year\n * @param mask optional holiday flags\n */\n constructor(date: HDate, hyear: number, mask: number) {\n super(date, `Rosh Hashana ${hyear}`, mask);\n this.hyear = hyear;\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return `${Locale.gettext('Rosh Hashana', locale)} ${this.hyear}`;\n }\n\n getEmoji(): string {\n return '🍏🍯';\n }\n}\n\nconst roshChodeshStr = 'Rosh Chodesh';\n\n/** Represents Rosh Chodesh, the beginning of a new month */\nexport class RoshChodeshEvent extends HolidayEvent {\n /**\n * Constructs Rosh Chodesh event\n * @param date Hebrew date event occurs\n * @param monthName Hebrew month name (not translated)\n */\n constructor(date: HDate, monthName: string) {\n super(date, `${roshChodeshStr} ${monthName}`, flags.ROSH_CHODESH);\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const monthName = this.getDesc().substring(roshChodeshStr.length + 1);\n const monthName0 = Locale.gettext(monthName, locale);\n const monthName1 = smartApostrophe(monthName0);\n return `${Locale.gettext(roshChodeshStr, locale)} ${monthName1}`;\n }\n\n basename(): string {\n return this.getDesc();\n }\n\n getEmoji(): string {\n return this.emoji || '🌒';\n }\n}\n"],"names":["hdesc"],"mappings":";;;;;;;AAMA;;;;;;;;;;;;;;;AAeG;AACG,MAAO,YAAa,SAAQ,KAAK,CAAA;;AAE5B,IAAA,aAAa;AACtB;;;;AAIG;AACM,IAAA,QAAQ;IACjB,WAAA,CAAY,IAAW,EAAE,IAAY,EAAE,IAAI,GAAG,CAAC,EAAE,KAAc,EAAA;QAC7D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5B;IACF;AAEA;;;;;;;;;;;;AAYG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;AAChB,aAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,aAAA,OAAO,CAAC,aAAa,EAAE,EAAE;AACzB,aAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE;AAC5B,aAAA,OAAO,CAAC,oBAAoB,EAAE,EAAE;AAChC,aAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,aAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE;AAC5B,aAAA,OAAO,CAAC,YAAY,EAAE,EAAE;AACxB,aAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC1B;AAEA;;;;AAIG;IACH,GAAG,GAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAC7B,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,MAAM,GAAG,GAAG,CAAA,gCAAA,EAAmC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACrG,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,GAAG,GAAG;IACtD;AAEA;;;AAGG;IACH,aAAa,GAAA;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;QAC3C;AACA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,QAAQ,IAAI;YACV,KAAKA,WAAK,CAAC,UAAU;YACrB,KAAKA,WAAK,CAAC,aAAa;YACxB,KAAKA,WAAK,CAAC,YAAY;YACvB,KAAKA,WAAK,CAAC,UAAU;YACrB,KAAKA,WAAK,CAAC,WAAW;YACtB,KAAKA,WAAK,CAAC,aAAa;YACxB,KAAKA,WAAK,CAAC,MAAM;YACjB,KAAKA,WAAK,CAAC,UAAU;YACrB,KAAKA,WAAK,CAAC,sBAAsB;AAC/B,gBAAA,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;;AAG/B,QAAA,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7B;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,QAAA,OAAO,eAAe,CAAC,GAAG,CAAC;IAC7B;AACA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;AACrC,QAAA,OAAO,eAAe,CAAC,GAAG,CAAC;IAC7B;AACD;AAED;;;AAGG;AACG,MAAO,gBAAiB,SAAQ,YAAY,CAAA;;IAEhD,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;IACpC;AACD;AAED,MAAM,aAAa,GAAG,IAAI;AAC1B,MAAM,aAAa,GAAG;IACpB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG;AAEV;;;AAGG;AACG,MAAO,aAAc,SAAQ,YAAY,CAAA;AACpC,IAAA,WAAW;AACpB;;AAEG;AACH,IAAA,WAAA,CAAY,IAAW,EAAE,IAAY,EAAE,IAAY,EAAE,WAAoB,EAAA;AACvE,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa;AAC1B,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC;QACtC;IACF;IACA,aAAa,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE;AAC3B,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACvB,YAAA,IAAI,EAAE;QACR;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB;AACD;AAED;AACM,MAAO,gBAAiB,SAAQ,YAAY,CAAA;AAC/B,IAAA,KAAK;AACtB;;;;;AAKG;AACH,IAAA,WAAA,CAAY,IAAW,EAAE,KAAa,EAAE,IAAY,EAAA;QAClD,KAAK,CAAC,IAAI,EAAE,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,EAAE,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,EAAE;IAClE;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,MAAM;IACf;AACD;AAED,MAAM,cAAc,GAAG,cAAc;AAErC;AACM,MAAO,gBAAiB,SAAQ,YAAY,CAAA;AAChD;;;;AAIG;IACH,WAAA,CAAY,IAAW,EAAE,SAAiB,EAAA;AACxC,QAAA,KAAK,CAAC,IAAI,EAAE,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAE,KAAK,CAAC,YAAY,CAAC;IACnE;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;AACpD,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC;AAC9C,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;IAClE;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI;IAC3B;AACD;;"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import { Locale, HDate, months } from '@hebcal/hdate';
3
3
  import { Event, flags } from './event.js';
4
4
  import { Molad } from './molad.js';
@@ -41,7 +41,7 @@ class MevarchimChodeshEvent extends Event {
41
41
  render(locale) {
42
42
  const monthName0 = Locale.gettext(this.monthName, locale);
43
43
  const monthName = smartApostrophe(monthName0);
44
- return Locale.gettext(mevarchimChodeshStr, locale) + ' ' + monthName;
44
+ return `${Locale.gettext(mevarchimChodeshStr, locale)} ${monthName}`;
45
45
  }
46
46
  /**
47
47
  * Returns (translated) description of this event
@@ -1 +1 @@
1
- {"version":3,"file":"MevarchimChodeshEvent.js","sources":["../../../src/MevarchimChodeshEvent.ts"],"sourcesContent":["import {HDate, Locale, months} from '@hebcal/hdate';\nimport {Event, flags} from './event.js';\nimport {Molad} from './molad.js';\nimport {smartApostrophe} from './string.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst mevarchimChodeshStr = 'Shabbat Mevarchim Chodesh';\n\n/** Represents Mevarchim haChodesh, the announcement of the new month */\nexport class MevarchimChodeshEvent extends Event {\n readonly monthName: string;\n /**\n * Constructs Mevarchim haChodesh event\n * @param date Hebrew date event occurs\n * @param monthName Hebrew month name (not translated)\n * @param memo text for the event memo. When falsy, a memo announcing the\n * molad of the upcoming month is generated automatically\n * @param locale Optional locale name\n */\n constructor(date: HDate, monthName: string, memo: string, locale?: string) {\n super(date, `${mevarchimChodeshStr} ${monthName}`, flags.SHABBAT_MEVARCHIM);\n this.monthName = Locale.gettext(monthName, locale);\n if (memo) {\n this.memo = memo;\n } else {\n const hyear = date.getFullYear();\n const hmonth = date.getMonth();\n const monNext =\n hmonth === HDate.monthsInYear(hyear) ? months.NISAN : hmonth + 1;\n const molad = new Molad(hyear, monNext);\n this.memo = molad.render('en', {hour12: false});\n }\n }\n\n basename(): string {\n return this.getDesc();\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const monthName0 = Locale.gettext(this.monthName, locale);\n const monthName = smartApostrophe(monthName0);\n return Locale.gettext(mevarchimChodeshStr, locale) + ' ' + monthName;\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n const str = this.render(locale);\n const space = str.indexOf(' ');\n return str.substring(space + 1);\n }\n}\n"],"names":[],"mappings":";;;;;;;AAMA,MAAM,mBAAmB,GAAG,2BAA2B;AAEvD;AACM,MAAO,qBAAsB,SAAQ,KAAK,CAAA;AACrC,IAAA,SAAS;AAClB;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,IAAW,EAAE,SAAiB,EAAE,IAAY,EAAE,MAAe,EAAA;AACvE,QAAA,KAAK,CAAC,IAAI,EAAE,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;QAClD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAClB;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC9B,MAAM,OAAO,GACX,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC;YAClE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AACvC,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC;QACjD;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,SAAS;IACtE;AACA;;;AAGG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;IACjC;AACD;;"}
1
+ {"version":3,"file":"MevarchimChodeshEvent.js","sources":["../../../src/MevarchimChodeshEvent.ts"],"sourcesContent":["import {HDate, Locale, months} from '@hebcal/hdate';\nimport {Event, flags} from './event.js';\nimport {Molad} from './molad.js';\nimport {smartApostrophe} from './string.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst mevarchimChodeshStr = 'Shabbat Mevarchim Chodesh';\n\n/** Represents Mevarchim haChodesh, the announcement of the new month */\nexport class MevarchimChodeshEvent extends Event {\n readonly monthName: string;\n /**\n * Constructs Mevarchim haChodesh event\n * @param date Hebrew date event occurs\n * @param monthName Hebrew month name (not translated)\n * @param memo text for the event memo. When falsy, a memo announcing the\n * molad of the upcoming month is generated automatically\n * @param locale Optional locale name\n */\n constructor(date: HDate, monthName: string, memo: string, locale?: string) {\n super(date, `${mevarchimChodeshStr} ${monthName}`, flags.SHABBAT_MEVARCHIM);\n this.monthName = Locale.gettext(monthName, locale);\n if (memo) {\n this.memo = memo;\n } else {\n const hyear = date.getFullYear();\n const hmonth = date.getMonth();\n const monNext =\n hmonth === HDate.monthsInYear(hyear) ? months.NISAN : hmonth + 1;\n const molad = new Molad(hyear, monNext);\n this.memo = molad.render('en', {hour12: false});\n }\n }\n\n basename(): string {\n return this.getDesc();\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const monthName0 = Locale.gettext(this.monthName, locale);\n const monthName = smartApostrophe(monthName0);\n return `${Locale.gettext(mevarchimChodeshStr, locale)} ${monthName}`;\n }\n /**\n * Returns (translated) description of this event\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n const str = this.render(locale);\n const space = str.indexOf(' ');\n return str.substring(space + 1);\n }\n}\n"],"names":[],"mappings":";;;;;;;AAMA,MAAM,mBAAmB,GAAG,2BAA2B;AAEvD;AACM,MAAO,qBAAsB,SAAQ,KAAK,CAAA;AACrC,IAAA,SAAS;AAClB;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,IAAW,EAAE,SAAiB,EAAE,IAAY,EAAE,MAAe,EAAA;AACvE,QAAA,KAAK,CAAC,IAAI,EAAE,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;QAClD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAClB;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC9B,MAAM,OAAO,GACX,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC;YAClE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AACvC,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC;QACjD;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AACA;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;IACtE;AACA;;;AAGG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;IACjC;AACD;;"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import { Event, flags } from './event.js';
3
3
  import { HDate, isoDateString } from '@hebcal/hdate';
4
4
  import { renderParshaName } from './parshaName.js';
@@ -38,7 +38,7 @@ class ParshaEvent extends Event {
38
38
  !HDate.isHDate(parsha.hdate)) {
39
39
  throw new TypeError(`Invalid SedraResult argument: ${JSON.stringify(parsha)}`);
40
40
  }
41
- const desc = 'Parashat ' + parsha.parsha.join('-');
41
+ const desc = `Parashat ${parsha.parsha.join('-')}`;
42
42
  super(parsha.hdate, desc, flags.PARSHA_HASHAVUA);
43
43
  this.p = parsha;
44
44
  }
@@ -57,8 +57,8 @@ class ParshaEvent extends Event {
57
57
  return undefined;
58
58
  }
59
59
  const dt = this.urlDateSuffix();
60
- const url = 'https://www.hebcal.com/sedrot/' + urlFriendly(this.basename()) + '-' + dt;
61
- return this.p.il ? url + '?i=on' : url;
60
+ const url = `https://www.hebcal.com/sedrot/${urlFriendly(this.basename())}-${dt}`;
61
+ return this.p.il ? `${url}?i=on` : url;
62
62
  }
63
63
  /**
64
64
  * The date portion of {@link url}, as `YYYYMMDD` — a parsha name recurs every
@@ -1 +1 @@
1
- {"version":3,"file":"ParshaEvent.js","sources":["../../../src/ParshaEvent.ts"],"sourcesContent":["import {Event, flags} from './event.js';\nimport {HDate, isoDateString} from '@hebcal/hdate';\nimport {renderParshaName} from './parshaName.js';\nimport {urlFriendly} from './string.js';\nimport {SedraResult} from './sedra.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\n/**\n * Represents one of 54 weekly Torah portions, always on a Saturday.\n *\n * `ParshaEvent` is for regular Parashat HaShavua readings. For Shabbatot\n * with holiday readings such as Shabbat Chol ha-Moed, use\n * `getHolidaysOnDate()` from `@hebcal/core`, or `getLeyningOnDate()` from\n * `@hebcal/leyning` when the display title and exact Torah readings are needed.\n */\nexport class ParshaEvent extends Event {\n /** The parsha name(s) and date this event was constructed from */\n readonly p: SedraResult;\n /**\n * Normally created by {@link calendar} (via `options.sedrot`)\n * rather than directly.\n * @param parsha result from {@link Sedra.lookup}\n * @throws {TypeError} if called with anything other than exactly one argument\n * @throws {TypeError} if `parsha` is not a valid {@link SedraResult} — it must\n * have an `HDate` and one or two parsha names\n */\n constructor(parsha: SedraResult) {\n // eslint-disable-next-line prefer-rest-params\n if (arguments.length !== 1) {\n throw new TypeError(\n `ParshaEvent constructor takes a single SedraResult argument; ` +\n `got ${arguments.length} arguments`\n );\n }\n if (\n typeof parsha !== 'object' ||\n parsha === null ||\n !Array.isArray(parsha.parsha) ||\n parsha.parsha.length === 0 ||\n parsha.parsha.length > 2 ||\n !HDate.isHDate(parsha.hdate)\n ) {\n throw new TypeError(\n `Invalid SedraResult argument: ${JSON.stringify(parsha)}`\n );\n }\n const desc = 'Parashat ' + parsha.parsha.join('-');\n super(parsha.hdate, desc, flags.PARSHA_HASHAVUA);\n this.p = parsha;\n }\n /**\n * @param [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to empty locale.\n */\n render(locale?: string): string {\n return renderParshaName(this.p.parsha, locale);\n }\n\n basename(): string {\n return this.p.parsha.join('-');\n }\n\n url(): string | undefined {\n const year = this.greg().getFullYear();\n if (year < 100 || year > 2999) {\n return undefined;\n }\n const dt = this.urlDateSuffix();\n const url =\n 'https://www.hebcal.com/sedrot/' + urlFriendly(this.basename()) + '-' + dt;\n return this.p.il ? url + '?i=on' : url;\n }\n\n /**\n * The date portion of {@link url}, as `YYYYMMDD` — a parsha name recurs every\n * year, so the full date is needed to identify the reading.\n */\n urlDateSuffix(): string {\n const isoDate = isoDateString(this.greg());\n return isoDate.replaceAll('-', '');\n }\n\n /** convenience function for compatibility with previous implementation */\n get parsha(): string[] {\n return this.p.parsha;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAOA;;;;;;;AAOG;AACG,MAAO,WAAY,SAAQ,KAAK,CAAA;;AAE3B,IAAA,CAAC;AACV;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,MAAmB,EAAA;;AAE7B,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,SAAS,CACjB,CAAA,6DAAA,CAA+D;AAC7D,gBAAA,CAAA,IAAA,EAAO,SAAS,CAAC,MAAM,CAAA,UAAA,CAAY,CACtC;QACH;QACA,IACE,OAAO,MAAM,KAAK,QAAQ;AAC1B,YAAA,MAAM,KAAK,IAAI;AACf,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAC1B,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B;AACA,YAAA,MAAM,IAAI,SAAS,CACjB,CAAA,8BAAA,EAAiC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,CAAE,CAC1D;QACH;AACA,QAAA,MAAM,IAAI,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAClD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC;AAChD,QAAA,IAAI,CAAC,CAAC,GAAG,MAAM;IACjB;AACA;;AAEG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;QACpB,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;IAChD;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;IAEA,GAAG,GAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAC7B,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;AAC/B,QAAA,MAAM,GAAG,GACP,gCAAgC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE;AAC5E,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG;IACxC;AAEA;;;AAGG;IACH,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;IACpC;;AAGA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM;IACtB;AACD;;"}
1
+ {"version":3,"file":"ParshaEvent.js","sources":["../../../src/ParshaEvent.ts"],"sourcesContent":["import {Event, flags} from './event.js';\nimport {HDate, isoDateString} from '@hebcal/hdate';\nimport {renderParshaName} from './parshaName.js';\nimport {urlFriendly} from './string.js';\nimport {SedraResult} from './sedra.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\n/**\n * Represents one of 54 weekly Torah portions, always on a Saturday.\n *\n * `ParshaEvent` is for regular Parashat HaShavua readings. For Shabbatot\n * with holiday readings such as Shabbat Chol ha-Moed, use\n * `getHolidaysOnDate()` from `@hebcal/core`, or `getLeyningOnDate()` from\n * `@hebcal/leyning` when the display title and exact Torah readings are needed.\n */\nexport class ParshaEvent extends Event {\n /** The parsha name(s) and date this event was constructed from */\n readonly p: SedraResult;\n /**\n * Normally created by {@link calendar} (via `options.sedrot`)\n * rather than directly.\n * @param parsha result from {@link Sedra.lookup}\n * @throws {TypeError} if called with anything other than exactly one argument\n * @throws {TypeError} if `parsha` is not a valid {@link SedraResult} — it must\n * have an `HDate` and one or two parsha names\n */\n constructor(parsha: SedraResult) {\n // eslint-disable-next-line prefer-rest-params\n if (arguments.length !== 1) {\n throw new TypeError(\n `ParshaEvent constructor takes a single SedraResult argument; ` +\n `got ${arguments.length} arguments`\n );\n }\n if (\n typeof parsha !== 'object' ||\n parsha === null ||\n !Array.isArray(parsha.parsha) ||\n parsha.parsha.length === 0 ||\n parsha.parsha.length > 2 ||\n !HDate.isHDate(parsha.hdate)\n ) {\n throw new TypeError(\n `Invalid SedraResult argument: ${JSON.stringify(parsha)}`\n );\n }\n const desc = `Parashat ${parsha.parsha.join('-')}`;\n super(parsha.hdate, desc, flags.PARSHA_HASHAVUA);\n this.p = parsha;\n }\n /**\n * @param [locale] Optional locale name (i.e: `'he'`, `'fr'`). Defaults to empty locale.\n */\n render(locale?: string): string {\n return renderParshaName(this.p.parsha, locale);\n }\n\n basename(): string {\n return this.p.parsha.join('-');\n }\n\n url(): string | undefined {\n const year = this.greg().getFullYear();\n if (year < 100 || year > 2999) {\n return undefined;\n }\n const dt = this.urlDateSuffix();\n const url = `https://www.hebcal.com/sedrot/${urlFriendly(this.basename())}-${dt}`;\n return this.p.il ? `${url}?i=on` : url;\n }\n\n /**\n * The date portion of {@link url}, as `YYYYMMDD` — a parsha name recurs every\n * year, so the full date is needed to identify the reading.\n */\n urlDateSuffix(): string {\n const isoDate = isoDateString(this.greg());\n return isoDate.replaceAll('-', '');\n }\n\n /** convenience function for compatibility with previous implementation */\n get parsha(): string[] {\n return this.p.parsha;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAOA;;;;;;;AAOG;AACG,MAAO,WAAY,SAAQ,KAAK,CAAA;;AAE3B,IAAA,CAAC;AACV;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,MAAmB,EAAA;;AAE7B,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,SAAS,CACjB,CAAA,6DAAA,CAA+D;AAC7D,gBAAA,CAAA,IAAA,EAAO,SAAS,CAAC,MAAM,CAAA,UAAA,CAAY,CACtC;QACH;QACA,IACE,OAAO,MAAM,KAAK,QAAQ;AAC1B,YAAA,MAAM,KAAK,IAAI;AACf,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAC1B,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B;AACA,YAAA,MAAM,IAAI,SAAS,CACjB,CAAA,8BAAA,EAAiC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,CAAE,CAC1D;QACH;AACA,QAAA,MAAM,IAAI,GAAG,CAAA,SAAA,EAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;QAClD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC;AAChD,QAAA,IAAI,CAAC,CAAC,GAAG,MAAM;IACjB;AACA;;AAEG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;QACpB,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;IAChD;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;IAEA,GAAG,GAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAC7B,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;AAC/B,QAAA,MAAM,GAAG,GAAG,CAAA,8BAAA,EAAiC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,EAAE,EAAE;AACjF,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,GAAG,GAAG;IACxC;AAEA;;;AAGG;IACH,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;IACpC;;AAGA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM;IACtB;AACD;;"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import { Locale } from '@hebcal/hdate';
3
3
  import { Event } from './event.js';
4
4
  import { reformatTimeStr } from './reformatTimeStr.js';
@@ -6,8 +6,7 @@ import { Zmanim } from './zmanim.js';
6
6
  import { holidayDesc } from './staticHolidays.js';
7
7
  import './locale.js';
8
8
 
9
- const HAVDALAH = holidayDesc.HAVDALAH;
10
- const CANDLE_LIGHTING = holidayDesc.CANDLE_LIGHTING;
9
+ const { HAVDALAH, CANDLE_LIGHTING } = holidayDesc;
11
10
  /**
12
11
  * Base class for events that have an associated wall-clock time and
13
12
  * geographic location — for example, candle lighting, havdalah, and
@@ -63,7 +62,7 @@ class TimedEvent extends Event {
63
62
  * @param [locale] Optional locale name (defaults to empty locale)
64
63
  */
65
64
  render(locale) {
66
- return Locale.gettext(this.getDesc(), locale) + ': ' + this.fmtTime;
65
+ return `${Locale.gettext(this.getDesc(), locale)}: ${this.fmtTime}`;
67
66
  }
68
67
  /**
69
68
  * Returns translation of "Candle lighting" without the time.
@@ -132,7 +131,7 @@ class HavdalahEvent extends TimedEvent {
132
131
  * @param [locale] Optional locale name (defaults to empty locale)
133
132
  */
134
133
  render(locale) {
135
- return this.renderBrief(locale) + ': ' + this.fmtTime;
134
+ return `${this.renderBrief(locale)}: ${this.fmtTime}`;
136
135
  }
137
136
  /**
138
137
  * Returns translation of "Havdalah" without the time.
@@ -1 +1 @@
1
- {"version":3,"file":"TimedEvent.js","sources":["../../../src/TimedEvent.ts"],"sourcesContent":["import {HDate, Locale} from '@hebcal/hdate';\nimport {CalOptions} from './CalOptions.js';\nimport {Location} from './location.js';\nimport {Event} from './event.js';\nimport {reformatTimeStr} from './reformatTimeStr.js';\nimport {Zmanim} from './zmanim.js';\nimport {holidayDesc as hdesc} from './staticHolidays.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst HAVDALAH = hdesc.HAVDALAH;\nconst CANDLE_LIGHTING = hdesc.CANDLE_LIGHTING;\n\n/**\n * Base class for events that have an associated wall-clock time and\n * geographic location — for example, candle lighting, havdalah, and\n * fast begin/end times.\n *\n * Stores both a `Date` (`eventTime`) and pre-formatted 24-hour\n * (`eventTimeStr`) and locale-aware (`fmtTime`) strings. May reference a\n * \"linked\" event such as the holiday whose candle-lighting time this\n * represents.\n */\nexport class TimedEvent extends Event {\n /** The exact moment of the event, rounded to the nearest minute */\n readonly eventTime: Date;\n /** Geographic location used to compute `eventTime` */\n readonly location: Location;\n /** 24-hour formatted time string in the location's timezone (e.g. `\"19:42\"`) */\n readonly eventTimeStr: string;\n /** Locale-aware formatted time string (e.g. `\"7:42pm\"` in US locale) */\n readonly fmtTime: string;\n /** Optional event this time is associated with (e.g. the Yom Tov being lit for) */\n readonly linkedEvent?: Event;\n /**\n * Optional length of the event in minutes. Not computed or validated by\n * this class; it's a plain count of minutes for downstream renderers\n * (e.g. `@hebcal/icalendar`) to add to the event's start wall-clock time\n * when producing a non-zero-duration `DTEND`. Undefined means no\n * duration was specified.\n */\n duration?: number;\n /**\n * Normally created by {@link calendar} rather than directly.\n * @param date Hebrew date the event occurs\n * @param desc Description (not translated)\n * @param mask optional holiday flags\n * @param eventTime the exact moment of the event\n * @param location geographic location used to format the time\n * @param linkedEvent optional event this time is associated with\n * @param options optional; `locale` and `hour12` affect {@link fmtTime}\n */\n constructor(\n date: HDate,\n desc: string,\n mask: number,\n eventTime: Date,\n location: Location,\n linkedEvent?: Event,\n options?: CalOptions\n ) {\n super(date, desc, mask);\n this.eventTime = Zmanim.roundTime(eventTime);\n this.location = location;\n const timeFormat = location.getTimeFormatter();\n this.eventTimeStr = Zmanim.formatTime(this.eventTime, timeFormat);\n const opts = {...options, location};\n this.fmtTime = reformatTimeStr(this.eventTimeStr, 'pm', opts);\n if (linkedEvent !== undefined) {\n this.linkedEvent = linkedEvent;\n }\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return Locale.gettext(this.getDesc(), locale) + ': ' + this.fmtTime;\n }\n /**\n * Returns translation of \"Candle lighting\" without the time.\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n return Locale.gettext(this.getDesc(), locale);\n }\n\n getCategories(): string[] {\n const desc = this.getDesc();\n switch (desc) {\n // LIGHT_CANDLES or LIGHT_CANDLES_TZEIS\n case CANDLE_LIGHTING:\n return ['candles'];\n // YOM_TOV_ENDS\n case HAVDALAH:\n return ['havdalah'];\n // flags.MINOR_FAST or flags.MAJOR_FAST\n case hdesc.FAST_BEGINS:\n case hdesc.FAST_ENDS:\n return ['zmanim', 'fast'];\n case hdesc.SOF_ZMAN_ACHILAT_CHAMETZ:\n return ['zmanim', 'achilasChametz'];\n case hdesc.BIUR_CHAMETZ:\n return ['zmanim', 'biurChametz'];\n }\n /* NOTREACHED */\n return ['unknown'];\n }\n}\n\n/**\n * Candle-lighting event for the eve of Shabbat or a Yom Tov.\n *\n * Generated by {@link calendar} when `options.candlelighting`\n * is `true` and `options.location` is provided. By default candle lighting\n * occurs 18 minutes before sundown in the Diaspora and 20 minutes before\n * sundown in Israel (40 minutes in Jerusalem; 30 minutes in Haifa and\n * Zikhron Ya'akov), configurable via `options.candleLightingMins`.\n */\nexport class CandleLightingEvent extends TimedEvent {\n constructor(\n date: HDate,\n mask: number,\n eventTime: Date,\n location: Location,\n linkedEvent?: Event,\n options?: CalOptions\n ) {\n super(date, CANDLE_LIGHTING, mask, eventTime, location, linkedEvent, options);\n }\n\n getEmoji(): string {\n return '🕯️';\n }\n}\n\n/**\n * Havdalah event marking the end of Shabbat or a Yom Tov.\n *\n * Generated by {@link calendar} when `options.candlelighting`\n * is `true` and `options.location` is provided. By default Havdalah is\n * calculated by *tzeit hakochavim* (8.5° solar depression); pass\n * `options.havdalahMins` to use a fixed minute offset instead, or\n * `options.havdalahDeg` to use a different degree.\n */\nexport class HavdalahEvent extends TimedEvent {\n private readonly havdalahMins?: number;\n constructor(\n date: HDate,\n mask: number,\n eventTime: Date,\n location: Location,\n havdalahMins?: number,\n linkedEvent?: Event,\n options?: CalOptions\n ) {\n super(date, HAVDALAH, mask, eventTime, location, linkedEvent, options);\n if (havdalahMins) {\n this.havdalahMins = havdalahMins;\n }\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return this.renderBrief(locale) + ': ' + this.fmtTime;\n }\n /**\n * Returns translation of \"Havdalah\" without the time.\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n let str = Locale.gettext(this.getDesc(), locale);\n if (this.havdalahMins) {\n const min = Locale.gettext('min', locale);\n str += ` (${this.havdalahMins} ${min})`;\n }\n return str;\n }\n\n getEmoji(): string {\n return '✨';\n }\n}\n"],"names":["hdesc"],"mappings":"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"}
1
+ {"version":3,"file":"TimedEvent.js","sources":["../../../src/TimedEvent.ts"],"sourcesContent":["import {HDate, Locale} from '@hebcal/hdate';\nimport {CalOptions} from './CalOptions.js';\nimport {Location} from './location.js';\nimport {Event} from './event.js';\nimport {reformatTimeStr} from './reformatTimeStr.js';\nimport {Zmanim} from './zmanim.js';\nimport {holidayDesc as hdesc} from './staticHolidays.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst {HAVDALAH, CANDLE_LIGHTING} = hdesc;\n\n/**\n * Base class for events that have an associated wall-clock time and\n * geographic location — for example, candle lighting, havdalah, and\n * fast begin/end times.\n *\n * Stores both a `Date` (`eventTime`) and pre-formatted 24-hour\n * (`eventTimeStr`) and locale-aware (`fmtTime`) strings. May reference a\n * \"linked\" event such as the holiday whose candle-lighting time this\n * represents.\n */\nexport class TimedEvent extends Event {\n /** The exact moment of the event, rounded to the nearest minute */\n readonly eventTime: Date;\n /** Geographic location used to compute `eventTime` */\n readonly location: Location;\n /** 24-hour formatted time string in the location's timezone (e.g. `\"19:42\"`) */\n readonly eventTimeStr: string;\n /** Locale-aware formatted time string (e.g. `\"7:42pm\"` in US locale) */\n readonly fmtTime: string;\n /** Optional event this time is associated with (e.g. the Yom Tov being lit for) */\n readonly linkedEvent?: Event;\n /**\n * Optional length of the event in minutes. Not computed or validated by\n * this class; it's a plain count of minutes for downstream renderers\n * (e.g. `@hebcal/icalendar`) to add to the event's start wall-clock time\n * when producing a non-zero-duration `DTEND`. Undefined means no\n * duration was specified.\n */\n duration?: number;\n /**\n * Normally created by {@link calendar} rather than directly.\n * @param date Hebrew date the event occurs\n * @param desc Description (not translated)\n * @param mask optional holiday flags\n * @param eventTime the exact moment of the event\n * @param location geographic location used to format the time\n * @param linkedEvent optional event this time is associated with\n * @param options optional; `locale` and `hour12` affect {@link fmtTime}\n */\n constructor(\n date: HDate,\n desc: string,\n mask: number,\n eventTime: Date,\n location: Location,\n linkedEvent?: Event,\n options?: CalOptions\n ) {\n super(date, desc, mask);\n this.eventTime = Zmanim.roundTime(eventTime);\n this.location = location;\n const timeFormat = location.getTimeFormatter();\n this.eventTimeStr = Zmanim.formatTime(this.eventTime, timeFormat);\n const opts = {...options, location};\n this.fmtTime = reformatTimeStr(this.eventTimeStr, 'pm', opts);\n if (linkedEvent !== undefined) {\n this.linkedEvent = linkedEvent;\n }\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return `${Locale.gettext(this.getDesc(), locale)}: ${this.fmtTime}`;\n }\n /**\n * Returns translation of \"Candle lighting\" without the time.\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n return Locale.gettext(this.getDesc(), locale);\n }\n\n getCategories(): string[] {\n const desc = this.getDesc();\n switch (desc) {\n // LIGHT_CANDLES or LIGHT_CANDLES_TZEIS\n case CANDLE_LIGHTING:\n return ['candles'];\n // YOM_TOV_ENDS\n case HAVDALAH:\n return ['havdalah'];\n // flags.MINOR_FAST or flags.MAJOR_FAST\n case hdesc.FAST_BEGINS:\n case hdesc.FAST_ENDS:\n return ['zmanim', 'fast'];\n case hdesc.SOF_ZMAN_ACHILAT_CHAMETZ:\n return ['zmanim', 'achilasChametz'];\n case hdesc.BIUR_CHAMETZ:\n return ['zmanim', 'biurChametz'];\n }\n /* NOTREACHED */\n return ['unknown'];\n }\n}\n\n/**\n * Candle-lighting event for the eve of Shabbat or a Yom Tov.\n *\n * Generated by {@link calendar} when `options.candlelighting`\n * is `true` and `options.location` is provided. By default candle lighting\n * occurs 18 minutes before sundown in the Diaspora and 20 minutes before\n * sundown in Israel (40 minutes in Jerusalem; 30 minutes in Haifa and\n * Zikhron Ya'akov), configurable via `options.candleLightingMins`.\n */\nexport class CandleLightingEvent extends TimedEvent {\n constructor(\n date: HDate,\n mask: number,\n eventTime: Date,\n location: Location,\n linkedEvent?: Event,\n options?: CalOptions\n ) {\n super(date, CANDLE_LIGHTING, mask, eventTime, location, linkedEvent, options);\n }\n\n getEmoji(): string {\n return '🕯️';\n }\n}\n\n/**\n * Havdalah event marking the end of Shabbat or a Yom Tov.\n *\n * Generated by {@link calendar} when `options.candlelighting`\n * is `true` and `options.location` is provided. By default Havdalah is\n * calculated by *tzeit hakochavim* (8.5° solar depression); pass\n * `options.havdalahMins` to use a fixed minute offset instead, or\n * `options.havdalahDeg` to use a different degree.\n */\nexport class HavdalahEvent extends TimedEvent {\n private readonly havdalahMins?: number;\n constructor(\n date: HDate,\n mask: number,\n eventTime: Date,\n location: Location,\n havdalahMins?: number,\n linkedEvent?: Event,\n options?: CalOptions\n ) {\n super(date, HAVDALAH, mask, eventTime, location, linkedEvent, options);\n if (havdalahMins) {\n this.havdalahMins = havdalahMins;\n }\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return `${this.renderBrief(locale)}: ${this.fmtTime}`;\n }\n /**\n * Returns translation of \"Havdalah\" without the time.\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n let str = Locale.gettext(this.getDesc(), locale);\n if (this.havdalahMins) {\n const min = Locale.gettext('min', locale);\n str += ` (${this.havdalahMins} ${min})`;\n }\n return str;\n }\n\n getEmoji(): string {\n return '✨';\n }\n}\n"],"names":["hdesc"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import { Locale } from '@hebcal/hdate';
3
3
  import { flags } from './event.js';
4
4
  import { HolidayEvent } from './HolidayEvent.js';
@@ -29,7 +29,7 @@ class YomKippurKatanEvent extends HolidayEvent {
29
29
  render(locale) {
30
30
  const monthName0 = Locale.gettext(this.nextMonthName, locale);
31
31
  const monthName = smartApostrophe(monthName0);
32
- return Locale.gettext(ykk, locale) + ' ' + monthName;
32
+ return `${Locale.gettext(ykk, locale)} ${monthName}`;
33
33
  }
34
34
  /**
35
35
  * @param [locale] Optional locale name (defaults to empty locale)
@@ -1 +1 @@
1
- {"version":3,"file":"YomKippurKatanEvent.js","sources":["../../../src/YomKippurKatanEvent.ts"],"sourcesContent":["import {HDate, Locale} from '@hebcal/hdate';\nimport {flags} from './event.js';\nimport {HolidayEvent} from './HolidayEvent.js';\nimport {smartApostrophe} from './string.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst ykk = 'Yom Kippur Katan';\n\n/** YKK is minor day of atonement on the day preceeding each Rosh Chodesh */\nexport class YomKippurKatanEvent extends HolidayEvent {\n private readonly nextMonthName: string;\n /**\n * Normally created by {@link calendar} (via\n * `options.yomKippurKatan`) rather than directly.\n * @param date Hebrew date event occurs\n * @param nextMonthName name of the upcoming month\n */\n constructor(date: HDate, nextMonthName: string) {\n super(\n date,\n `${ykk} ${nextMonthName}`,\n flags.MINOR_FAST | flags.YOM_KIPPUR_KATAN\n );\n this.nextMonthName = nextMonthName;\n this.memo = `Minor Day of Atonement on the day preceeding Rosh Chodesh ${nextMonthName}`;\n }\n\n basename(): string {\n return this.getDesc();\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const monthName0 = Locale.gettext(this.nextMonthName, locale);\n const monthName = smartApostrophe(monthName0);\n return Locale.gettext(ykk, locale) + ' ' + monthName;\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n return Locale.gettext(ykk, locale);\n }\n\n url(): string | undefined {\n return undefined;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAMA,MAAM,GAAG,GAAG,kBAAkB;AAE9B;AACM,MAAO,mBAAoB,SAAQ,YAAY,CAAA;AAClC,IAAA,aAAa;AAC9B;;;;;AAKG;IACH,WAAA,CAAY,IAAW,EAAE,aAAqB,EAAA;AAC5C,QAAA,KAAK,CACH,IAAI,EACJ,CAAA,EAAG,GAAG,IAAI,aAAa,CAAA,CAAE,EACzB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAC1C;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAA,0DAAA,EAA6D,aAAa,EAAE;IAC1F;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AACA;;AAEG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,SAAS;IACtD;AACA;;AAEG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;QACzB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IACpC;IAEA,GAAG,GAAA;AACD,QAAA,OAAO,SAAS;IAClB;AACD;;"}
1
+ {"version":3,"file":"YomKippurKatanEvent.js","sources":["../../../src/YomKippurKatanEvent.ts"],"sourcesContent":["import {HDate, Locale} from '@hebcal/hdate';\nimport {flags} from './event.js';\nimport {HolidayEvent} from './HolidayEvent.js';\nimport {smartApostrophe} from './string.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst ykk = 'Yom Kippur Katan';\n\n/** YKK is minor day of atonement on the day preceeding each Rosh Chodesh */\nexport class YomKippurKatanEvent extends HolidayEvent {\n private readonly nextMonthName: string;\n /**\n * Normally created by {@link calendar} (via\n * `options.yomKippurKatan`) rather than directly.\n * @param date Hebrew date event occurs\n * @param nextMonthName name of the upcoming month\n */\n constructor(date: HDate, nextMonthName: string) {\n super(\n date,\n `${ykk} ${nextMonthName}`,\n flags.MINOR_FAST | flags.YOM_KIPPUR_KATAN\n );\n this.nextMonthName = nextMonthName;\n this.memo = `Minor Day of Atonement on the day preceeding Rosh Chodesh ${nextMonthName}`;\n }\n\n basename(): string {\n return this.getDesc();\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n const monthName0 = Locale.gettext(this.nextMonthName, locale);\n const monthName = smartApostrophe(monthName0);\n return `${Locale.gettext(ykk, locale)} ${monthName}`;\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n renderBrief(locale?: string): string {\n return Locale.gettext(ykk, locale);\n }\n\n url(): string | undefined {\n return undefined;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAMA,MAAM,GAAG,GAAG,kBAAkB;AAE9B;AACM,MAAO,mBAAoB,SAAQ,YAAY,CAAA;AAClC,IAAA,aAAa;AAC9B;;;;;AAKG;IACH,WAAA,CAAY,IAAW,EAAE,aAAqB,EAAA;AAC5C,QAAA,KAAK,CACH,IAAI,EACJ,CAAA,EAAG,GAAG,IAAI,aAAa,CAAA,CAAE,EACzB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAC1C;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAA,0DAAA,EAA6D,aAAa,EAAE;IAC1F;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AACA;;AAEG;AACH,IAAA,MAAM,CAAC,MAAe,EAAA;AACpB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;IACtD;AACA;;AAEG;AACH,IAAA,WAAW,CAAC,MAAe,EAAA;QACzB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IACpC;IAEA,GAAG,GAAA;AACD,QAAA,OAAO,SAAS;IAClB;AACD;;"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  var poAshkenazi = { "headers": { "plural-forms": "nplurals=2; plural=(n > 1);", "language": "und-x-ashkenaz" }, "contexts": { "": { "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"], "Pesach Shabbat Chol ha-Moed": ["Pesach Shabbos Chol ha-Moed"], "Purim Katan": ["Purim Koton"], "Rosh Hashana LaBehemot": ["Rosh Hashana LaBeheimos"], "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)"], "Sukkot Shabbat Chol ha-Moed": ["Sukkos Shabbos Chol ha-Moed"], "Ta'anit Bechorot": ["Ta’anis Bechoros"], "Ta'anit BeHaB": ["Ta’anis BeHaB"], "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"], "Asara B'Tevet": ["Asara B’Teves"], "Birkat Hachamah": ["Birkas HaChamah"], "Birkat HaChamah": ["Birkas HaChamah"], "Shushan Purim Katan": ["Shushan Purim Koton"], "Alot HaShachar": ["Alos HaShachar"], "Misheyakir": ["Misheyakir"], "Misheyakir Machmir": ["Misheyakir Machmir"], "Sunrise": ["Sunrise"], "Kriat Shema, sof zeman": ["Krias Shema, sof zman"], "Tefilah, sof zeman": ["Tefilah, sof zman"], "Kriat Shema, sof zeman (MGA)": ["Krias Shema, sof zman (MGA)"], "Kriat Shema, sof zeman (GRA)": ["Krias Shema, sof zman (GRA)"], "Tefilah, sof zeman (MGA)": ["Tefilah, sof zman (MGA)"], "Tefilah, sof zeman (GRA)": ["Tefilah, sof zman (GRA)"], "Chatzot HaLailah": ["Chatzos HaLailah"], "Chatzot HaYom": ["Chatzos"], "Chatzot hayom": ["Chatzos"], "Mincha Gedolah": ["Mincha Gedolah"], "Mincha Ketanah": ["Mincha Ketanah"], "Plag HaMincha": ["Plag HaMincha"], "Sunset": ["Sunset"], "Bein HaShemashot": ["Bein HaShemashos"], "Tzeit HaKochavim": ["Tzeis HaKochavim"] } } };
3
3
 
4
4
  export { poAshkenazi as default };
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.11.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
2
2
  import './locale.js';
3
3
  import { months, Locale, abs2greg, HDate } from '@hebcal/hdate';
4
4
  import { makeCandleEvent, makeFastStartEnd, makeWeekdayChanukahCandleLighting } from './candles.js';
@@ -289,34 +289,11 @@ function calendar(options = {}) {
289
289
  }
290
290
  const FRI = 5;
291
291
  const SAT = 6;
292
- const NISAN = months.NISAN;
293
- const SIVAN = months.SIVAN;
294
- const ELUL = months.ELUL;
295
- const LIGHT_CANDLES = flags.LIGHT_CANDLES;
296
- const YOM_TOV_ENDS = flags.YOM_TOV_ENDS;
297
- const CHUL_ONLY = flags.CHUL_ONLY;
298
- const IL_ONLY = flags.IL_ONLY;
299
- const LIGHT_CANDLES_TZEIS = flags.LIGHT_CANDLES_TZEIS;
300
- const CHANUKAH_CANDLES = flags.CHANUKAH_CANDLES;
301
- const MINOR_FAST = flags.MINOR_FAST;
302
- const SPECIAL_SHABBAT = flags.SPECIAL_SHABBAT;
303
- const MODERN_HOLIDAY = flags.MODERN_HOLIDAY;
304
- const MAJOR_FAST = flags.MAJOR_FAST;
305
- const ROSH_CHODESH = flags.ROSH_CHODESH;
306
- const PARSHA_HASHAVUA = flags.PARSHA_HASHAVUA;
307
- const DAF_YOMI = flags.DAF_YOMI;
308
- const MISHNA_YOMI = flags.MISHNA_YOMI;
309
- const NACH_YOMI = flags.NACH_YOMI;
310
- const YERUSHALMI_YOMI = flags.YERUSHALMI_YOMI;
311
- const OMER_COUNT = flags.OMER_COUNT;
312
- const SHABBAT_MEVARCHIM = flags.SHABBAT_MEVARCHIM;
313
- const MINOR_HOLIDAY = flags.MINOR_HOLIDAY;
314
- const EREV = flags.EREV;
315
- const CHOL_HAMOED = flags.CHOL_HAMOED;
316
- const YOM_KIPPUR_KATAN = flags.YOM_KIPPUR_KATAN;
317
- const YIZKOR = flags.YIZKOR;
318
- const BEHAB = flags.BEHAB;
292
+ const { NISAN, SIVAN, ELUL } = months;
293
+ const { LIGHT_CANDLES, YOM_TOV_ENDS, CHUL_ONLY, IL_ONLY, LIGHT_CANDLES_TZEIS, CHANUKAH_CANDLES, MINOR_FAST, SPECIAL_SHABBAT, MODERN_HOLIDAY, MAJOR_FAST, ROSH_CHODESH, PARSHA_HASHAVUA, DAF_YOMI, MISHNA_YOMI, NACH_YOMI, YERUSHALMI_YOMI, OMER_COUNT, SHABBAT_MEVARCHIM, MINOR_HOLIDAY, EREV, CHOL_HAMOED, YOM_KIPPUR_KATAN, YIZKOR, BEHAB, } = flags;
319
294
  const unrecognizedAlreadyWarned = new Set();
295
+ // The "as const satisfies Record<keyof CalOptions, 1>" line lets
296
+ // compiler flag any CalOptions field missing from the list
320
297
  const RECOGNIZED_OPTIONS = {
321
298
  location: 1,
322
299
  year: 1,
@@ -357,12 +334,10 @@ const RECOGNIZED_OPTIONS = {
357
334
  useElevation: 1,
358
335
  yizkor: 1,
359
336
  };
360
- /**
361
- * @private
362
- */
337
+ const recognizedKeys = new Set(Object.keys(RECOGNIZED_OPTIONS));
363
338
  function warnUnrecognizedOptions(options) {
364
339
  for (const k of Object.keys(options)) {
365
- if (RECOGNIZED_OPTIONS[k] === undefined && !unrecognizedAlreadyWarned.has(k)) {
340
+ if (!recognizedKeys.has(k) && !unrecognizedAlreadyWarned.has(k)) {
366
341
  console.warn(`Ignoring unrecognized HebrewCalendar option: ${k}`);
367
342
  unrecognizedAlreadyWarned.add(k);
368
343
  }
@@ -394,8 +369,6 @@ const geoIdCandleOffset = {
394
369
  '293067': 30, // Zikhron Yaakov
395
370
  };
396
371
  /**
397
- * @private
398
- * @constant
399
372
  * This calculation is based on the position of the sun 36 minutes after sunset in Jerusalem
400
373
  * around the equinox / equilux, which is 8.5° below geometric zenith.
401
374
  * The Ohr Meir considers this the time that 3 small stars are visible,
@@ -405,7 +378,6 @@ const geoIdCandleOffset = {
405
378
  const TZEIT_3SMALL_STARS = 8.5;
406
379
  /**
407
380
  * Modifies options in-place
408
- * @private
409
381
  */
410
382
  function checkCandleOptions(options) {
411
383
  if (!options.candlelighting) {
@@ -484,7 +456,6 @@ function overrideIsraelCandleMins(location) {
484
456
  }
485
457
  /**
486
458
  * Mask to filter Holiday array
487
- * @private
488
459
  */
489
460
  function getMaskFromOptions(options) {
490
461
  if (typeof options.mask === 'number') {
@@ -568,9 +539,6 @@ function getMaskFromOptions(options) {
568
539
  return mask;
569
540
  }
570
541
  const defaultLocation = new Location(0, 0, false, 'UTC');
571
- /**
572
- * @private
573
- */
574
542
  function setOptionsFromMask(options) {
575
543
  const m = options.mask || 0;
576
544
  if (m & ROSH_CHODESH)
@@ -613,7 +581,6 @@ function setOptionsFromMask(options) {
613
581
  /**
614
582
  * Appends the Event `ev` to the `events` array. Also may add related
615
583
  * timed events like candle-lighting or fast start/end
616
- * @private
617
584
  */
618
585
  function appendHolidayAndRelated(candlesEv, events, ev, options, isFriday, isSaturday, hasUserMask) {
619
586
  const il = options.il || false;