@hebcal/core 6.13.1 → 6.14.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 (70) hide show
  1. package/dist/bundle.js +296 -90
  2. package/dist/bundle.js.map +1 -1
  3. package/dist/bundle.min.js +17 -17
  4. package/dist/bundle.min.js.map +1 -1
  5. package/dist/esm/CalOptions.d.ts +6 -0
  6. package/dist/esm/DailyLearning.js +1 -1
  7. package/dist/esm/HebrewDateEvent.js +1 -1
  8. package/dist/esm/HolidayEvent.js +1 -1
  9. package/dist/esm/KiddushLevanaEvent.d.ts +48 -0
  10. package/dist/esm/KiddushLevanaEvent.js +181 -0
  11. package/dist/esm/KiddushLevanaEvent.js.map +1 -0
  12. package/dist/esm/MevarchimChodeshEvent.js +1 -1
  13. package/dist/esm/ParshaEvent.js +1 -1
  14. package/dist/esm/TimedEvent.js +1 -1
  15. package/dist/esm/YomKippurKatanEvent.js +1 -1
  16. package/dist/esm/ashkenazi.po.d.ts +5 -0
  17. package/dist/esm/ashkenazi.po.js +2 -2
  18. package/dist/esm/ashkenazi.po.js.map +1 -1
  19. package/dist/esm/calendar.d.ts +3 -0
  20. package/dist/esm/calendar.js +52 -32
  21. package/dist/esm/calendar.js.map +1 -1
  22. package/dist/esm/candles.js +5 -19
  23. package/dist/esm/candles.js.map +1 -1
  24. package/dist/esm/cities.json.js +1 -1
  25. package/dist/esm/event.d.ts +2 -0
  26. package/dist/esm/event.js +3 -1
  27. package/dist/esm/event.js.map +1 -1
  28. package/dist/esm/getStartAndEnd.js +1 -1
  29. package/dist/esm/hallel.js +1 -1
  30. package/dist/esm/he-x-NoNikud.po.d.ts +5 -0
  31. package/dist/esm/he-x-NoNikud.po.js +2 -2
  32. package/dist/esm/he-x-NoNikud.po.js.map +1 -1
  33. package/dist/esm/he.po.d.ts +5 -0
  34. package/dist/esm/he.po.js +2 -2
  35. package/dist/esm/he.po.js.map +1 -1
  36. package/dist/esm/hebcal.js +1 -1
  37. package/dist/esm/holidays.js +1 -1
  38. package/dist/esm/index.d.ts +1 -0
  39. package/dist/esm/index.js +2 -1
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/isAssurBemlacha.js +1 -1
  42. package/dist/esm/isAveilut.js +1 -1
  43. package/dist/esm/isFastDay.js +1 -1
  44. package/dist/esm/locale.js +1 -1
  45. package/dist/esm/location.js +1 -1
  46. package/dist/esm/modern.js +1 -1
  47. package/dist/esm/molad.js +1 -1
  48. package/dist/esm/moladBase.js +1 -1
  49. package/dist/esm/moladDate.js +1 -1
  50. package/dist/esm/omer.js +1 -1
  51. package/dist/esm/parshaName.js +1 -1
  52. package/dist/esm/parshaYear.js +1 -1
  53. package/dist/esm/pkgVersion.d.ts +1 -1
  54. package/dist/esm/pkgVersion.js +2 -2
  55. package/dist/esm/pkgVersion.js.map +1 -1
  56. package/dist/esm/reformatTimeStr.js +1 -1
  57. package/dist/esm/sedra.js +1 -1
  58. package/dist/esm/sefira.json.js +1 -1
  59. package/dist/esm/staticHolidays.js +1 -1
  60. package/dist/esm/string.js +1 -1
  61. package/dist/esm/tachanun.js +1 -1
  62. package/dist/esm/zenith.d.ts +51 -0
  63. package/dist/esm/zenith.js +55 -0
  64. package/dist/esm/zenith.js.map +1 -0
  65. package/dist/esm/zmanim.js +7 -24
  66. package/dist/esm/zmanim.js.map +1 -1
  67. package/package.json +4 -4
  68. package/po/ashkenazi.po +15 -0
  69. package/po/he-x-NoNikud.po +15 -0
  70. package/po/he.po +15 -0
@@ -163,6 +163,12 @@ export type CalOptions = {
163
163
  * include event announcing the molad
164
164
  */
165
165
  molad?: boolean;
166
+ /**
167
+ * include the latest time for Kiddush Levana each month, calculated as
168
+ * halfway between one _molad_ and the next (the Maharil's opinion).
169
+ * Requires `options.location`. See {@link KiddushLevanaEvent}.
170
+ */
171
+ kiddushLevanaMaharil?: boolean;
166
172
  /**
167
173
  * use Ashkenazi transliterations for event titles (default Sephardi transliterations)
168
174
  * @deprecated use `event.render('ashkenazi')` instead
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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),
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -0,0 +1,48 @@
1
+ import 'temporal-polyfill/global';
2
+ import { HDate } from '@hebcal/hdate';
3
+ import { CalOptions } from './CalOptions.js';
4
+ import { Location } from './location.js';
5
+ import { Molad } from './molad.js';
6
+ import { TimedEvent } from './TimedEvent.js';
7
+ import './locale.js';
8
+ /**
9
+ * The latest time to recite _Kiddush Levana_ (Sanctification of the Moon),
10
+ * calculated as halfway between one _molad_ and the next, according to
11
+ * the [Maharil](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin)
12
+ * (14 days, 18 hours, 22 minutes and 1.666 seconds after the _molad_).
13
+ *
14
+ * Generated by {@link calendar} when `options.kiddushLevanaMaharil` is
15
+ * `true` and `options.location` is provided:
16
+ * - When the time falls during the day (between _alot hashachar_ 16.1° and
17
+ * _tzeit_ 8.5°), it is moved back to _alot hashachar_ that morning, the
18
+ * end of the last night on which Kiddush Levana can be said.
19
+ * - When the time falls during Shabbat or a Yom Tov, it is moved back to
20
+ * regular candle-lighting time before that Shabbat or Yom Tov.
21
+ * - The time is rounded down to the minute, never up.
22
+ *
23
+ * The {@link memo} lists the unadjusted earliest (3 and 7 days after the
24
+ * _molad_) and latest (Maharil and 15 days after the _molad_) times.
25
+ */
26
+ export declare class KiddushLevanaEvent extends TimedEvent {
27
+ /** The molad of the month this event belongs to */
28
+ readonly molad: Molad;
29
+ /**
30
+ * Normally created by {@link calendar} rather than directly.
31
+ * @param date Hebrew date the event occurs
32
+ * @param eventTime latest time for Kiddush Levana, possibly adjusted
33
+ * @param location geographic location used to format the time
34
+ * @param molad the molad of the month
35
+ * @param options optional; `locale` and `hour12` affect the formatted times
36
+ */
37
+ constructor(date: HDate, eventTime: Date, location: Location, molad: Molad, options?: CalOptions);
38
+ getEmoji(): string;
39
+ getCategories(): string[];
40
+ }
41
+ /**
42
+ * Makes the "Latest Kiddush Levana" event for one Hebrew month, or
43
+ * `undefined` if it can't be calculated (e.g. no sunrise or sunset).
44
+ * The returned event's date may be earlier than the date of the
45
+ * actual latest time, when that time falls on Shabbat or a Yom Tov.
46
+ * @internal
47
+ */
48
+ export declare function makeKiddushLevanaEvent(hyear: number, hmonth: number, options: CalOptions): KiddushLevanaEvent | undefined;
@@ -0,0 +1,181 @@
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later https://www.gnu.org/licenses/gpl-2.0.txt */
2
+ import 'temporal-polyfill/global';
3
+ import { Locale, HDate } from '@hebcal/hdate';
4
+ import { flags } from './event.js';
5
+ import { getHolidaysOnDate } from './holidays.js';
6
+ import { Molad } from './molad.js';
7
+ import { reformatTimeStr } from './reformatTimeStr.js';
8
+ import { TimedEvent } from './TimedEvent.js';
9
+ import { Zmanim } from './zmanim.js';
10
+ import './locale.js';
11
+
12
+ const LATEST_KIDDUSH_LEVANA = 'Latest Kiddush Levana';
13
+ /**
14
+ * The latest time to recite _Kiddush Levana_ (Sanctification of the Moon),
15
+ * calculated as halfway between one _molad_ and the next, according to
16
+ * the [Maharil](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin)
17
+ * (14 days, 18 hours, 22 minutes and 1.666 seconds after the _molad_).
18
+ *
19
+ * Generated by {@link calendar} when `options.kiddushLevanaMaharil` is
20
+ * `true` and `options.location` is provided:
21
+ * - When the time falls during the day (between _alot hashachar_ 16.1° and
22
+ * _tzeit_ 8.5°), it is moved back to _alot hashachar_ that morning, the
23
+ * end of the last night on which Kiddush Levana can be said.
24
+ * - When the time falls during Shabbat or a Yom Tov, it is moved back to
25
+ * regular candle-lighting time before that Shabbat or Yom Tov.
26
+ * - The time is rounded down to the minute, never up.
27
+ *
28
+ * The {@link memo} lists the unadjusted earliest (3 and 7 days after the
29
+ * _molad_) and latest (Maharil and 15 days after the _molad_) times.
30
+ */
31
+ class KiddushLevanaEvent extends TimedEvent {
32
+ /** The molad of the month this event belongs to */
33
+ molad;
34
+ /**
35
+ * Normally created by {@link calendar} rather than directly.
36
+ * @param date Hebrew date the event occurs
37
+ * @param eventTime latest time for Kiddush Levana, possibly adjusted
38
+ * @param location geographic location used to format the time
39
+ * @param molad the molad of the month
40
+ * @param options optional; `locale` and `hour12` affect the formatted times
41
+ */
42
+ constructor(date, eventTime, location, molad, options) {
43
+ super(date, LATEST_KIDDUSH_LEVANA, flags.KIDDUSH_LEVANA, eventTime, location, undefined, options);
44
+ this.molad = molad;
45
+ this.memo = makeMemo(molad, location, options);
46
+ }
47
+ getEmoji() {
48
+ return '🌔';
49
+ }
50
+ getCategories() {
51
+ return ['zmanim', 'kiddushLevana'];
52
+ }
53
+ }
54
+ function toDate(zdt) {
55
+ return new Date(zdt.epochMilliseconds);
56
+ }
57
+ function toZdt(dt, tzid) {
58
+ const millis = dt.getTime();
59
+ if (isNaN(millis)) {
60
+ return null;
61
+ }
62
+ return Temporal.Instant.fromEpochMilliseconds(millis).toZonedDateTimeISO(tzid);
63
+ }
64
+ function floorMinute(zdt) {
65
+ return zdt.round({ smallestUnit: 'minute', roundingMode: 'floor' });
66
+ }
67
+ function ceilMinute(zdt) {
68
+ return zdt.round({ smallestUnit: 'minute', roundingMode: 'ceil' });
69
+ }
70
+ function makeMemo(molad, location, options) {
71
+ const tzid = location.getTzid();
72
+ const locale = options?.locale;
73
+ const times = [
74
+ [
75
+ 'Earliest Kiddush Levana (3 days)',
76
+ ceilMinute(molad.getTchilasZmanKidushLevana3Days()),
77
+ ],
78
+ [
79
+ 'Earliest Kiddush Levana (7 days)',
80
+ ceilMinute(molad.getTchilasZmanKidushLevana7Days()),
81
+ ],
82
+ [
83
+ 'Latest Kiddush Levana (Maharil)',
84
+ floorMinute(molad.getSofZmanKidushLevanaBetweenMoldos()),
85
+ ],
86
+ [
87
+ 'Latest Kiddush Levana (15 days)',
88
+ floorMinute(molad.getSofZmanKidushLevana15Days()),
89
+ ],
90
+ ];
91
+ const dateFormat = new Intl.DateTimeFormat(intlLocale(locale), {
92
+ timeZone: tzid,
93
+ weekday: 'short',
94
+ day: 'numeric',
95
+ month: 'short',
96
+ year: 'numeric',
97
+ });
98
+ const timeFormat = location.getTimeFormatter();
99
+ const opts = { ...options, location };
100
+ return times
101
+ .map(([label, zdt]) => {
102
+ const dt = toDate(zdt);
103
+ const timeStr = reformatTimeStr(Zmanim.formatTime(dt, timeFormat), 'pm', opts);
104
+ return `${Locale.gettext(label, locale)}: ${dateFormat.format(dt)}, ${timeStr}`;
105
+ })
106
+ .join('\n');
107
+ }
108
+ function intlLocale(locale) {
109
+ if (!locale || locale === 'en' || locale === 'ashkenazi') {
110
+ return 'en-US';
111
+ }
112
+ if (Locale.isHebrewLocale(locale)) {
113
+ return 'he-IL';
114
+ }
115
+ try {
116
+ return Intl.DateTimeFormat.supportedLocalesOf(locale)[0] ?? 'en-US';
117
+ }
118
+ catch {
119
+ return 'en-US';
120
+ }
121
+ }
122
+ function isShabbatOrChag(hd, il) {
123
+ if (hd.getDay() === 6) {
124
+ return true;
125
+ }
126
+ const events = getHolidaysOnDate(hd, il) ?? [];
127
+ return events.some(ev => ev.hasFlag('CHAG'));
128
+ }
129
+ /**
130
+ * Makes the "Latest Kiddush Levana" event for one Hebrew month, or
131
+ * `undefined` if it can't be calculated (e.g. no sunrise or sunset).
132
+ * The returned event's date may be earlier than the date of the
133
+ * actual latest time, when that time falls on Shabbat or a Yom Tov.
134
+ * @internal
135
+ */
136
+ function makeKiddushLevanaEvent(hyear, hmonth, options) {
137
+ const location = options.location;
138
+ const useElevation = Boolean(options.useElevation);
139
+ const il = Boolean(options.il);
140
+ const tzid = location.getTzid();
141
+ // Find the civil date on which the Maharil's time falls.
142
+ // Zmanim only computes this zman between the 11th and 16th of the month.
143
+ for (let dd = 11; dd <= 16; dd++) {
144
+ const hd = new HDate(dd, hmonth, hyear);
145
+ const zmanim = new Zmanim(location, hd, useElevation);
146
+ if (zmanim.getSofZmanKidushLevanaBetweenMoldos() === null) {
147
+ continue;
148
+ }
149
+ // Move a daytime time back to alot hashachar that morning
150
+ // Same tzeit (8.5°) as isAssurBemlacha()
151
+ const alos = toZdt(zmanim.alotHaShachar(), tzid);
152
+ const tzeit = toZdt(zmanim.tzeit(), tzid);
153
+ const zdt = zmanim.getSofZmanKidushLevanaBetweenMoldos(alos, tzeit);
154
+ if (zdt === null) {
155
+ return undefined;
156
+ }
157
+ const molad = new Molad(hyear, hmonth);
158
+ // After daytime adjustment the time is at night: before alot hashachar
159
+ // it belongs to today's Hebrew date, after tzeit to tomorrow's.
160
+ const nightOf = zdt.hour < 12 ? hd : hd.next();
161
+ if (!isShabbatOrChag(nightOf, il)) {
162
+ return new KiddushLevanaEvent(hd, toDate(floorMinute(zdt)), location, molad, options);
163
+ }
164
+ // Back up to candle-lighting time before the Shabbat or Yom Tov
165
+ let first = nightOf;
166
+ while (isShabbatOrChag(first.prev(), il)) {
167
+ first = first.prev();
168
+ }
169
+ const erev = first.prev();
170
+ const erevZmanim = new Zmanim(location, erev, useElevation);
171
+ const candleLighting = erevZmanim.sunsetOffset(Number(options.candleLightingMins), true);
172
+ if (isNaN(candleLighting.getTime())) {
173
+ return undefined;
174
+ }
175
+ return new KiddushLevanaEvent(erev, candleLighting, location, molad, options);
176
+ }
177
+ return undefined;
178
+ }
179
+
180
+ export { KiddushLevanaEvent, makeKiddushLevanaEvent };
181
+ //# sourceMappingURL=KiddushLevanaEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KiddushLevanaEvent.js","sources":["../../../src/KiddushLevanaEvent.ts"],"sourcesContent":["import 'temporal-polyfill/global';\nimport {HDate, Locale} from '@hebcal/hdate';\nimport {CalOptions} from './CalOptions.js';\nimport {flags} from './event.js';\nimport {getHolidaysOnDate} from './holidays.js';\nimport {Location} from './location.js';\nimport {Molad} from './molad.js';\nimport {reformatTimeStr} from './reformatTimeStr.js';\nimport {TimedEvent} from './TimedEvent.js';\nimport {Zmanim} from './zmanim.js';\nimport './locale.js'; // Adds Hebrew and Ashkenazic translations\n\nconst LATEST_KIDDUSH_LEVANA = 'Latest Kiddush Levana';\n\n/**\n * The latest time to recite _Kiddush Levana_ (Sanctification of the Moon),\n * calculated as halfway between one _molad_ and the next, according to\n * the [Maharil](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin)\n * (14 days, 18 hours, 22 minutes and 1.666 seconds after the _molad_).\n *\n * Generated by {@link calendar} when `options.kiddushLevanaMaharil` is\n * `true` and `options.location` is provided:\n * - When the time falls during the day (between _alot hashachar_ 16.1° and\n * _tzeit_ 8.5°), it is moved back to _alot hashachar_ that morning, the\n * end of the last night on which Kiddush Levana can be said.\n * - When the time falls during Shabbat or a Yom Tov, it is moved back to\n * regular candle-lighting time before that Shabbat or Yom Tov.\n * - The time is rounded down to the minute, never up.\n *\n * The {@link memo} lists the unadjusted earliest (3 and 7 days after the\n * _molad_) and latest (Maharil and 15 days after the _molad_) times.\n */\nexport class KiddushLevanaEvent extends TimedEvent {\n /** The molad of the month this event belongs to */\n readonly molad: Molad;\n /**\n * Normally created by {@link calendar} rather than directly.\n * @param date Hebrew date the event occurs\n * @param eventTime latest time for Kiddush Levana, possibly adjusted\n * @param location geographic location used to format the time\n * @param molad the molad of the month\n * @param options optional; `locale` and `hour12` affect the formatted times\n */\n constructor(\n date: HDate,\n eventTime: Date,\n location: Location,\n molad: Molad,\n options?: CalOptions\n ) {\n super(\n date,\n LATEST_KIDDUSH_LEVANA,\n flags.KIDDUSH_LEVANA,\n eventTime,\n location,\n undefined,\n options\n );\n this.molad = molad;\n this.memo = makeMemo(molad, location, options);\n }\n\n getEmoji(): string {\n return '🌔';\n }\n\n getCategories(): string[] {\n return ['zmanim', 'kiddushLevana'];\n }\n}\n\nfunction toDate(zdt: Temporal.ZonedDateTime): Date {\n return new Date(zdt.epochMilliseconds);\n}\n\nfunction toZdt(dt: Date, tzid: string): Temporal.ZonedDateTime | null {\n const millis = dt.getTime();\n if (isNaN(millis)) {\n return null;\n }\n return Temporal.Instant.fromEpochMilliseconds(millis).toZonedDateTimeISO(tzid);\n}\n\nfunction floorMinute(zdt: Temporal.ZonedDateTime): Temporal.ZonedDateTime {\n return zdt.round({smallestUnit: 'minute', roundingMode: 'floor'});\n}\n\nfunction ceilMinute(zdt: Temporal.ZonedDateTime): Temporal.ZonedDateTime {\n return zdt.round({smallestUnit: 'minute', roundingMode: 'ceil'});\n}\n\nfunction makeMemo(molad: Molad, location: Location, options?: CalOptions): string {\n const tzid = location.getTzid();\n const locale = options?.locale;\n const times: [string, Temporal.ZonedDateTime][] = [\n [\n 'Earliest Kiddush Levana (3 days)',\n ceilMinute(molad.getTchilasZmanKidushLevana3Days()),\n ],\n [\n 'Earliest Kiddush Levana (7 days)',\n ceilMinute(molad.getTchilasZmanKidushLevana7Days()),\n ],\n [\n 'Latest Kiddush Levana (Maharil)',\n floorMinute(molad.getSofZmanKidushLevanaBetweenMoldos()),\n ],\n [\n 'Latest Kiddush Levana (15 days)',\n floorMinute(molad.getSofZmanKidushLevana15Days()),\n ],\n ];\n const dateFormat = new Intl.DateTimeFormat(intlLocale(locale), {\n timeZone: tzid,\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n });\n const timeFormat = location.getTimeFormatter();\n const opts = {...options, location};\n return times\n .map(([label, zdt]) => {\n const dt = toDate(zdt);\n const timeStr = reformatTimeStr(\n Zmanim.formatTime(dt, timeFormat),\n 'pm',\n opts\n );\n return `${Locale.gettext(label, locale)}: ${dateFormat.format(dt)}, ${timeStr}`;\n })\n .join('\\n');\n}\n\nfunction intlLocale(locale?: string): string {\n if (!locale || locale === 'en' || locale === 'ashkenazi') {\n return 'en-US';\n }\n if (Locale.isHebrewLocale(locale)) {\n return 'he-IL';\n }\n try {\n return Intl.DateTimeFormat.supportedLocalesOf(locale)[0] ?? 'en-US';\n } catch {\n return 'en-US';\n }\n}\n\nfunction isShabbatOrChag(hd: HDate, il: boolean): boolean {\n if (hd.getDay() === 6) {\n return true;\n }\n const events = getHolidaysOnDate(hd, il) ?? [];\n return events.some(ev => ev.hasFlag('CHAG'));\n}\n\n/**\n * Makes the \"Latest Kiddush Levana\" event for one Hebrew month, or\n * `undefined` if it can't be calculated (e.g. no sunrise or sunset).\n * The returned event's date may be earlier than the date of the\n * actual latest time, when that time falls on Shabbat or a Yom Tov.\n * @internal\n */\nexport function makeKiddushLevanaEvent(\n hyear: number,\n hmonth: number,\n options: CalOptions\n): KiddushLevanaEvent | undefined {\n const location = options.location as Location;\n const useElevation = Boolean(options.useElevation);\n const il = Boolean(options.il);\n const tzid = location.getTzid();\n // Find the civil date on which the Maharil's time falls.\n // Zmanim only computes this zman between the 11th and 16th of the month.\n for (let dd = 11; dd <= 16; dd++) {\n const hd = new HDate(dd, hmonth, hyear);\n const zmanim = new Zmanim(location, hd, useElevation);\n if (zmanim.getSofZmanKidushLevanaBetweenMoldos() === null) {\n continue;\n }\n // Move a daytime time back to alot hashachar that morning\n // Same tzeit (8.5°) as isAssurBemlacha()\n const alos = toZdt(zmanim.alotHaShachar(), tzid);\n const tzeit = toZdt(zmanim.tzeit(), tzid);\n const zdt = zmanim.getSofZmanKidushLevanaBetweenMoldos(alos, tzeit);\n if (zdt === null) {\n return undefined;\n }\n const molad = new Molad(hyear, hmonth);\n // After daytime adjustment the time is at night: before alot hashachar\n // it belongs to today's Hebrew date, after tzeit to tomorrow's.\n const nightOf = zdt.hour < 12 ? hd : hd.next();\n if (!isShabbatOrChag(nightOf, il)) {\n return new KiddushLevanaEvent(\n hd,\n toDate(floorMinute(zdt)),\n location,\n molad,\n options\n );\n }\n // Back up to candle-lighting time before the Shabbat or Yom Tov\n let first = nightOf;\n while (isShabbatOrChag(first.prev(), il)) {\n first = first.prev();\n }\n const erev = first.prev();\n const erevZmanim = new Zmanim(location, erev, useElevation);\n const candleLighting = erevZmanim.sunsetOffset(\n Number(options.candleLightingMins),\n true\n );\n if (isNaN(candleLighting.getTime())) {\n return undefined;\n }\n return new KiddushLevanaEvent(erev, candleLighting, location, molad, options);\n }\n return undefined;\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -78,6 +78,11 @@ declare const _default: {
78
78
  Sunset: string[];
79
79
  "Bein HaShemashot": string[];
80
80
  "Tzeit HaKochavim": string[];
81
+ "Latest Kiddush Levana": string[];
82
+ "Earliest Kiddush Levana (3 days)": string[];
83
+ "Earliest Kiddush Levana (7 days)": string[];
84
+ "Latest Kiddush Levana (Maharil)": string[];
85
+ "Latest Kiddush Levana (15 days)": string[];
81
86
  };
82
87
  };
83
88
  };
@@ -1,5 +1,5 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
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"] } } };
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later https://www.gnu.org/licenses/gpl-2.0.txt */
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"], "Latest Kiddush Levana": ["Latest Kiddush Levanah"], "Earliest Kiddush Levana (3 days)": ["Earliest Kiddush Levanah (3 days)"], "Earliest Kiddush Levana (7 days)": ["Earliest Kiddush Levanah (7 days)"], "Latest Kiddush Levana (Maharil)": ["Latest Kiddush Levanah (Maharil)"], "Latest Kiddush Levana (15 days)": ["Latest Kiddush Levanah (15 days)"] } } };
3
3
 
4
4
  export { poAshkenazi as default };
5
5
  //# sourceMappingURL=ashkenazi.po.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ashkenazi.po.js","sources":["../../../src/ashkenazi.po.ts"],"sourcesContent":["export default {\"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\"]}}}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ashkenazi.po.js","sources":["../../../src/ashkenazi.po.ts"],"sourcesContent":["export default {\"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\"],\"Latest Kiddush Levana\":[\"Latest Kiddush Levanah\"],\"Earliest Kiddush Levana (3 days)\":[\"Earliest Kiddush Levanah (3 days)\"],\"Earliest Kiddush Levana (7 days)\":[\"Earliest Kiddush Levanah (7 days)\"],\"Latest Kiddush Levana (Maharil)\":[\"Latest Kiddush Levanah (Maharil)\"],\"Latest Kiddush Levana (15 days)\":[\"Latest Kiddush Levanah (15 days)\"]}}}"],"names":[],"mappings":"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"}
@@ -36,6 +36,9 @@ import { Event } from './event.js';
36
36
  * * Yom Kippur Katan (`options.yomKippurKatan`)
37
37
  * * BeHaB fast days after Pesach and Sukkot (`options.behab`)
38
38
  * * Yizkor (`options.yizkor`)
39
+ * * Latest time for Kiddush Levana, according to the Maharil
40
+ * (`options.kiddushLevanaMaharil`, requires `options.location`;
41
+ * see {@link KiddushLevanaEvent})
39
42
  *
40
43
  * Daily Study of texts are supported by the
41
44
  * {@link https://github.com/hebcal/hebcal-learning @hebcal/learning} package,
@@ -1,4 +1,4 @@
1
- /*! @hebcal/core v6.13.1, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
1
+ /*! @hebcal/core v6.14.1, distributed under GPLv2 or later 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';
@@ -10,12 +10,14 @@ import { ParshaEvent } from './ParshaEvent.js';
10
10
  import { getSedra } from './sedra.js';
11
11
  import { HavdalahEvent, TimedEvent } from './TimedEvent.js';
12
12
  import { DailyLearning } from './DailyLearning.js';
13
+ import { makeKiddushLevanaEvent } from './KiddushLevanaEvent.js';
13
14
  import { MevarchimChodeshEvent } from './MevarchimChodeshEvent.js';
14
15
  import { MoladEvent, Molad } from './molad.js';
15
16
  import { OmerEvent } from './omer.js';
16
17
  import { Zmanim } from './zmanim.js';
17
18
  import { Location } from './location.js';
18
19
  import { holidayDesc } from './staticHolidays.js';
20
+ import { DEG_8_POINT_5, DEG_7_POINT_083 } from './zenith.js';
19
21
 
20
22
  /**
21
23
  * Calculates holidays and other Hebrew calendar events based on {@link CalOptions}.
@@ -53,6 +55,9 @@ import { holidayDesc } from './staticHolidays.js';
53
55
  * * Yom Kippur Katan (`options.yomKippurKatan`)
54
56
  * * BeHaB fast days after Pesach and Sukkot (`options.behab`)
55
57
  * * Yizkor (`options.yizkor`)
58
+ * * Latest time for Kiddush Levana, according to the Maharil
59
+ * (`options.kiddushLevanaMaharil`, requires `options.location`;
60
+ * see {@link KiddushLevanaEvent})
56
61
  *
57
62
  * Daily Study of texts are supported by the
58
63
  * {@link https://github.com/hebcal/hebcal-learning @hebcal/learning} package,
@@ -146,11 +151,12 @@ import { holidayDesc } from './staticHolidays.js';
146
151
  */
147
152
  function calendar(options = {}) {
148
153
  options = { ...options }; // so we can modify freely
154
+ const hasUserMask = typeof options.mask === 'number';
155
+ // before checkCandleOptions(), because the mask can enable options
156
+ options.mask = getMaskFromOptions(options);
149
157
  checkCandleOptions(options);
150
158
  const location = (options.location = options.location || defaultLocation);
151
159
  const il = (options.il = options.il || location.getIsrael() || false);
152
- const hasUserMask = typeof options.mask === 'number';
153
- options.mask = getMaskFromOptions(options);
154
160
  if (options.locale) {
155
161
  const locale = options.locale;
156
162
  if (locale && typeof locale !== 'string') {
@@ -172,6 +178,8 @@ function calendar(options = {}) {
172
178
  let beginOmer = -1;
173
179
  let endOmer = -1;
174
180
  let currentYear = -1;
181
+ let kiddushLevanaMonth = -1;
182
+ let kiddushLevanaEv;
175
183
  const startAndEnd = getStartAndEnd(options);
176
184
  warnUnrecognizedOptions(options);
177
185
  const startAbs = startAndEnd[0];
@@ -252,6 +260,18 @@ function calendar(options = {}) {
252
260
  const events = makeMoladAndMevarchimChodesh(hd, options);
253
261
  evts.push(...events);
254
262
  }
263
+ if (options.kiddushLevanaMaharil && dd >= 9 && dd <= 17) {
264
+ // The event usually falls between the 11th and the 16th, but may be
265
+ // moved back to candle-lighting before a Shabbat or Yom Tov
266
+ const monthKey = hyear * 100 + mm;
267
+ if (monthKey !== kiddushLevanaMonth) {
268
+ kiddushLevanaMonth = monthKey;
269
+ kiddushLevanaEv = makeKiddushLevanaEvent(hyear, mm, options);
270
+ }
271
+ if (kiddushLevanaEv?.getDate().abs() === abs) {
272
+ evts.push(kiddushLevanaEv);
273
+ }
274
+ }
255
275
  if (!candlesEv && options.candlelighting && (isFriday || isSaturday)) {
256
276
  candlesEv = makeCandleEvent(undefined, hd, options, isFriday, isSaturday);
257
277
  if (isFriday && candlesEv && sedra) {
@@ -290,7 +310,7 @@ function calendar(options = {}) {
290
310
  const FRI = 5;
291
311
  const SAT = 6;
292
312
  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;
313
+ 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, KIDDUSH_LEVANA, } = flags;
294
314
  const unrecognizedAlreadyWarned = new Set();
295
315
  // The "as const satisfies Record<keyof CalOptions, 1>" line lets
296
316
  // compiler flag any CalOptions field missing from the list
@@ -333,6 +353,7 @@ const RECOGNIZED_OPTIONS = {
333
353
  dailyLearning: 1,
334
354
  useElevation: 1,
335
355
  yizkor: 1,
356
+ kiddushLevanaMaharil: 1,
336
357
  };
337
358
  const recognizedKeys = new Set(Object.keys(RECOGNIZED_OPTIONS));
338
359
  function warnUnrecognizedOptions(options) {
@@ -368,47 +389,33 @@ const geoIdCandleOffset = {
368
389
  '294801': 30, // Haifa
369
390
  '293067': 30, // Zikhron Yaakov
370
391
  };
371
- /**
372
- * This calculation is based on the position of the sun 36 minutes after sunset in Jerusalem
373
- * around the equinox / equilux, which is 8.5° below geometric zenith.
374
- * The Ohr Meir considers this the time that 3 small stars are visible,
375
- * which is later than the required 3 medium stars.
376
- * @see {https://kosherjava.com/zmanim/docs/api/com/kosherjava/zmanim/ZmanimCalendar.html#ZENITH_8_POINT_5}
377
- */
378
- const TZEIT_3SMALL_STARS = 8.5;
379
392
  /**
380
393
  * Modifies options in-place
381
394
  */
382
395
  function checkCandleOptions(options) {
383
- if (!options.candlelighting) {
396
+ if (!options.candlelighting && !options.kiddushLevanaMaharil) {
384
397
  return;
385
398
  }
386
399
  const location = options.location;
387
400
  if (location === undefined || !(location instanceof Location)) {
388
- throw new TypeError('options.candlelighting requires valid options.location');
389
- }
390
- if (typeof options.havdalahMins === 'number' &&
391
- typeof options.havdalahDeg === 'number') {
392
- throw new TypeError('options.havdalahMins and options.havdalahDeg are mutually exclusive');
393
- }
394
- if (typeof options.fastEndDeg === 'number' &&
395
- typeof options.fastEndMins === 'number') {
396
- throw new TypeError('options.fastEndDeg and options.fastEndMins are mutually exclusive');
397
- }
398
- if (typeof options.fastStartDeg === 'number' &&
399
- typeof options.fastStartMins === 'number') {
400
- throw new TypeError('options.fastStartDeg and options.fastStartMins are mutually exclusive');
401
- }
402
- if (typeof options.tishaBavEndDeg === 'number' &&
403
- typeof options.tishaBavEndMins === 'number') {
404
- throw new TypeError('options.tishaBavEndDeg and options.tishaBavEndMins are mutually exclusive');
401
+ const name = options.candlelighting ? 'candlelighting' : 'kiddushLevanaMaharil';
402
+ throw new TypeError(`options.${name} requires valid options.location`);
405
403
  }
404
+ // Kiddush Levana needs candle-lighting time for Shabbat and Yom Tov
406
405
  const min0 = options.candleLightingMins;
407
406
  let min = typeof min0 === 'number' && !isNaN(min0) ? Math.trunc(min0) : 18;
408
407
  if (location.getIsrael() && Math.abs(min) === 18) {
409
408
  min = overrideIsraelCandleMins(location);
410
409
  }
411
410
  options.candleLightingMins = -1 * Math.abs(min);
411
+ if (!options.candlelighting) {
412
+ // Havdalah and fast options only affect candle-lighting events
413
+ return;
414
+ }
415
+ assertMutuallyExclusive(options, 'havdalahMins', 'havdalahDeg');
416
+ assertMutuallyExclusive(options, 'fastEndDeg', 'fastEndMins');
417
+ assertMutuallyExclusive(options, 'fastStartDeg', 'fastStartMins');
418
+ assertMutuallyExclusive(options, 'tishaBavEndDeg', 'tishaBavEndMins');
412
419
  if (typeof options.havdalahMins === 'number') {
413
420
  options.havdalahMins = Math.trunc(Math.abs(options.havdalahMins));
414
421
  }
@@ -416,7 +423,7 @@ function checkCandleOptions(options) {
416
423
  options.havdalahDeg = Math.abs(options.havdalahDeg);
417
424
  }
418
425
  else {
419
- options.havdalahDeg = TZEIT_3SMALL_STARS;
426
+ options.havdalahDeg = DEG_8_POINT_5;
420
427
  }
421
428
  if (typeof options.fastEndDeg === 'number') {
422
429
  options.fastEndDeg = Math.abs(options.fastEndDeg);
@@ -437,6 +444,14 @@ function checkCandleOptions(options) {
437
444
  options.tishaBavEndMins = Math.trunc(Math.abs(options.tishaBavEndMins));
438
445
  }
439
446
  }
447
+ /**
448
+ * Throws if both numeric options `a` and `b` are set
449
+ */
450
+ function assertMutuallyExclusive(options, a, b) {
451
+ if (typeof options[a] === 'number' && typeof options[b] === 'number') {
452
+ throw new TypeError(`options.${a} and options.${b} are mutually exclusive`);
453
+ }
454
+ }
440
455
  function overrideIsraelCandleMins(location) {
441
456
  const geoid = location.getGeoId();
442
457
  if (geoid) {
@@ -521,6 +536,9 @@ function getMaskFromOptions(options) {
521
536
  if (options.yizkor) {
522
537
  mask |= YIZKOR;
523
538
  }
539
+ if (options.kiddushLevanaMaharil) {
540
+ mask |= KIDDUSH_LEVANA;
541
+ }
524
542
  const dailyLearning = options.dailyLearning;
525
543
  if (typeof dailyLearning === 'object' && dailyLearning !== null) {
526
544
  if (dailyLearning.dafYomi) {
@@ -576,6 +594,8 @@ function setOptionsFromMask(options) {
576
594
  options.behab = true;
577
595
  if (m & YIZKOR)
578
596
  options.yizkor = true;
597
+ if (m & KIDDUSH_LEVANA)
598
+ options.kiddushLevanaMaharil = true;
579
599
  return m;
580
600
  }
581
601
  /**
@@ -687,7 +707,7 @@ function makeOmerEvent(hd, omerDay, options) {
687
707
  if (options.candlelighting) {
688
708
  const location = options.location;
689
709
  const zmanim = new Zmanim(location, hd.prev(), false);
690
- const tzeit = zmanim.tzeit(7.0833);
710
+ const tzeit = zmanim.tzeit(DEG_7_POINT_083);
691
711
  if (!isNaN(tzeit.getTime())) {
692
712
  omerEv.alarm = tzeit;
693
713
  }