hebrew-date-utils 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +148 -0
  4. package/dist/arithmetic.d.ts +7 -0
  5. package/dist/arithmetic.d.ts.map +1 -0
  6. package/dist/arithmetic.js +34 -0
  7. package/dist/arithmetic.js.map +1 -0
  8. package/dist/boundaries.d.ts +8 -0
  9. package/dist/boundaries.d.ts.map +1 -0
  10. package/dist/boundaries.js +31 -0
  11. package/dist/boundaries.js.map +1 -0
  12. package/dist/constants.d.ts +7 -0
  13. package/dist/constants.d.ts.map +1 -0
  14. package/dist/constants.js +63 -0
  15. package/dist/constants.js.map +1 -0
  16. package/dist/conversion.d.ts +9 -0
  17. package/dist/conversion.d.ts.map +1 -0
  18. package/dist/conversion.js +67 -0
  19. package/dist/conversion.js.map +1 -0
  20. package/dist/formatting.d.ts +13 -0
  21. package/dist/formatting.d.ts.map +1 -0
  22. package/dist/formatting.js +25 -0
  23. package/dist/formatting.js.map +1 -0
  24. package/dist/hebcal-compat.d.ts +2 -0
  25. package/dist/hebcal-compat.d.ts.map +1 -0
  26. package/dist/hebcal-compat.js +2 -0
  27. package/dist/hebcal-compat.js.map +1 -0
  28. package/dist/holidays.d.ts +6 -0
  29. package/dist/holidays.d.ts.map +1 -0
  30. package/dist/holidays.js +59 -0
  31. package/dist/holidays.js.map +1 -0
  32. package/dist/index.d.ts +15 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +15 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/info.d.ts +4 -0
  37. package/dist/info.d.ts.map +1 -0
  38. package/dist/info.js +43 -0
  39. package/dist/info.js.map +1 -0
  40. package/dist/membership.d.ts +8 -0
  41. package/dist/membership.d.ts.map +1 -0
  42. package/dist/membership.js +33 -0
  43. package/dist/membership.js.map +1 -0
  44. package/dist/month-utils.d.ts +14 -0
  45. package/dist/month-utils.d.ts.map +1 -0
  46. package/dist/month-utils.js +43 -0
  47. package/dist/month-utils.js.map +1 -0
  48. package/dist/navigation.d.ts +14 -0
  49. package/dist/navigation.d.ts.map +1 -0
  50. package/dist/navigation.js +38 -0
  51. package/dist/navigation.js.map +1 -0
  52. package/dist/ranges.d.ts +9 -0
  53. package/dist/ranges.d.ts.map +1 -0
  54. package/dist/ranges.js +103 -0
  55. package/dist/ranges.js.map +1 -0
  56. package/dist/types.d.ts +85 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +2 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/year.d.ts +6 -0
  61. package/dist/year.d.ts.map +1 -0
  62. package/dist/year.js +27 -0
  63. package/dist/year.js.map +1 -0
  64. package/package.json +119 -0
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ export * from "./types.js";
2
+ export * from "./constants.js";
3
+ export * from "./conversion.js";
4
+ export * from "./month-utils.js";
5
+ export * from "./boundaries.js";
6
+ export * from "./ranges.js";
7
+ export * from "./info.js";
8
+ export * from "./membership.js";
9
+ export * from "./navigation.js";
10
+ export * from "./formatting.js";
11
+ export * from "./holidays.js";
12
+ export * from "./year.js";
13
+ export * from "./arithmetic.js";
14
+ export { HDate, HebrewCalendar, months } from "./hebcal-compat.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/info.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { GregorianMonthInfo, HebrewMonthInfo, HebrewMonthInput } from "./types.js";
2
+ export declare function getHebrewMonthInfo(year: number, month: HebrewMonthInput): HebrewMonthInfo;
3
+ export declare function getGregorianMonthInfo(year: number, month: number): GregorianMonthInfo;
4
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../src/info.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,eAAe,CAajB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,kBAAkB,CA6BpB"}
package/dist/info.js ADDED
@@ -0,0 +1,43 @@
1
+ import { differenceInCalendarDays } from "date-fns";
2
+ import { GREGORIAN_MONTH_NAMES_EN } from "./constants.js";
3
+ import { getGregorianMonthBoundaries, getHebrewMonthBoundaries, } from "./boundaries.js";
4
+ import { listDualDatesInRange } from "./ranges.js";
5
+ import { getDaysInHebrewMonth, getHebrewMonthName, getHebrewMonthNameHe, isHebrewLeapYear, } from "./month-utils.js";
6
+ export function getHebrewMonthInfo(year, month) {
7
+ const bounds = getHebrewMonthBoundaries(year, month);
8
+ return {
9
+ month: bounds.start.hebMonth,
10
+ name: getHebrewMonthName(bounds.start.hebMonth, year),
11
+ nameHe: getHebrewMonthNameHe(bounds.start.hebMonth, year),
12
+ daysInMonth: getDaysInHebrewMonth(year, bounds.start.hebMonth),
13
+ year,
14
+ isLeapYear: isHebrewLeapYear(year),
15
+ firstDay: bounds.start,
16
+ lastDay: bounds.end,
17
+ };
18
+ }
19
+ export function getGregorianMonthInfo(year, month) {
20
+ const bounds = getGregorianMonthBoundaries(year, month);
21
+ const days = listDualDatesInRange(bounds.start, bounds.end);
22
+ const hebrewMonthsMap = new Map();
23
+ for (const day of days) {
24
+ const key = `${day.hebYear}-${day.hebMonth}`;
25
+ if (!hebrewMonthsMap.has(key)) {
26
+ hebrewMonthsMap.set(key, {
27
+ month: day.hebMonth,
28
+ year: day.hebYear,
29
+ name: day.hebMonthName,
30
+ });
31
+ }
32
+ }
33
+ return {
34
+ month,
35
+ year,
36
+ name: GREGORIAN_MONTH_NAMES_EN[month] ?? "Unknown",
37
+ daysInMonth: differenceInCalendarDays(bounds.end.greg, bounds.start.greg) + 1,
38
+ firstDay: bounds.start,
39
+ lastDay: bounds.end,
40
+ hebrewMonths: Array.from(hebrewMonthsMap.values()),
41
+ };
42
+ }
43
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../src/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAO1B,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,KAAuB;IAEvB,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;QAC5B,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QACrD,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QACzD,WAAW,EAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9D,IAAI;QACJ,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,KAAK;QACtB,OAAO,EAAE,MAAM,CAAC,GAAG;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,KAAa;IAEb,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,IAAI,GAAG,EAG5B,CAAC;IAEJ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;gBACvB,KAAK,EAAE,GAAG,CAAC,QAAQ;gBACnB,IAAI,EAAE,GAAG,CAAC,OAAO;gBACjB,IAAI,EAAE,GAAG,CAAC,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;QACL,IAAI;QACJ,IAAI,EAAE,wBAAwB,CAAC,KAAK,CAAC,IAAI,SAAS;QAClD,WAAW,EACT,wBAAwB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAClE,QAAQ,EAAE,MAAM,CAAC,KAAK;QACtB,OAAO,EAAE,MAAM,CAAC,GAAG;QACnB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { DualDateInput, DualDateRange, HebrewMonthInput } from "./types.js";
2
+ export declare function isDateInHebrewMonth(input: DualDateInput, month: HebrewMonthInput, year: number): boolean;
3
+ export declare function isDateInGregorianMonth(input: DualDateInput, month: number, year: number): boolean;
4
+ export declare function isSameHebrewDate(a: DualDateInput, b: DualDateInput): boolean;
5
+ export declare function isSameGregorianDate(a: DualDateInput, b: DualDateInput): boolean;
6
+ export declare function compareDualDates(a: DualDateInput, b: DualDateInput): number;
7
+ export declare function isWithinDualDateRange(input: DualDateInput, range: DualDateRange): boolean;
8
+ //# sourceMappingURL=membership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.d.ts","sourceRoot":"","sources":["../src/membership.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAKT;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAGT;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAS5E;AAED,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,GACf,OAAO,CAET;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAE3E;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,GACnB,OAAO,CAMT"}
@@ -0,0 +1,33 @@
1
+ import { differenceInCalendarDays, isSameDay, isWithinInterval, } from "date-fns";
2
+ import { HDate } from "./hebcal-compat.js";
3
+ import { toDualDate, toGregorian } from "./conversion.js";
4
+ export function isDateInHebrewMonth(input, month, year) {
5
+ const dual = toDualDate(input);
6
+ const numericMonth = typeof month === "number" ? month : HDate.monthFromName(month);
7
+ return dual.hebYear === year && dual.hebMonth === numericMonth;
8
+ }
9
+ export function isDateInGregorianMonth(input, month, year) {
10
+ const greg = toGregorian(input);
11
+ return greg.getMonth() === month && greg.getFullYear() === year;
12
+ }
13
+ export function isSameHebrewDate(a, b) {
14
+ const da = toDualDate(a);
15
+ const db = toDualDate(b);
16
+ return (da.hebYear === db.hebYear &&
17
+ da.hebMonth === db.hebMonth &&
18
+ da.hebDay === db.hebDay);
19
+ }
20
+ export function isSameGregorianDate(a, b) {
21
+ return isSameDay(toGregorian(a), toGregorian(b));
22
+ }
23
+ export function compareDualDates(a, b) {
24
+ return differenceInCalendarDays(toGregorian(a), toGregorian(b));
25
+ }
26
+ export function isWithinDualDateRange(input, range) {
27
+ const date = toGregorian(input);
28
+ return isWithinInterval(date, {
29
+ start: range.start.greg,
30
+ end: range.end.greg,
31
+ });
32
+ }
33
+ //# sourceMappingURL=membership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.js","sourceRoot":"","sources":["../src/membership.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,SAAS,EACT,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO1D,MAAM,UAAU,mBAAmB,CACjC,KAAoB,EACpB,KAAuB,EACvB,IAAY;IAEZ,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,YAAY,GAChB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAoB,EACpB,KAAa,EACb,IAAY;IAEZ,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAgB,EAAE,CAAgB;IACjE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO;QACzB,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ;QAC3B,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,CAAgB,EAChB,CAAgB;IAEhB,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAgB,EAAE,CAAgB;IACjE,OAAO,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAoB,EACpB,KAAoB;IAEpB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,gBAAgB,CAAC,IAAI,EAAE;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;QACvB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI;KACpB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { HebrewMonthInput } from "./types.js";
2
+ export declare function normalizeHebrewMonth(month: HebrewMonthInput): number;
3
+ export declare function isHebrewLeapYear(year: number): boolean;
4
+ export declare function getMonthsInHebrewYear(year: number): number;
5
+ export declare function getDaysInHebrewMonth(year: number, month: HebrewMonthInput): number;
6
+ export declare function getHebrewMonthName(month: HebrewMonthInput, year: number): string;
7
+ export declare function getHebrewMonthNameHe(month: HebrewMonthInput, year: number): string;
8
+ export declare function getHebrewMonthNameEn(month: HebrewMonthInput, year: number): string;
9
+ export declare function getHebrewYearMonths(year: number): Array<{
10
+ month: number;
11
+ name: string;
12
+ days: number;
13
+ }>;
14
+ //# sourceMappingURL=month-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"month-utils.d.ts","sourceRoot":"","sources":["../src/month-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,CAMR;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,CAMR;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBtD"}
@@ -0,0 +1,43 @@
1
+ import { HDate } from "./hebcal-compat.js";
2
+ import { HEBREW_MONTH_NAMES_EN, HEBREW_MONTH_NAMES_HE } from "./constants.js";
3
+ export function normalizeHebrewMonth(month) {
4
+ return HDate.monthNum(month);
5
+ }
6
+ export function isHebrewLeapYear(year) {
7
+ return HDate.isLeapYear(year);
8
+ }
9
+ export function getMonthsInHebrewYear(year) {
10
+ return HDate.monthsInYear(year);
11
+ }
12
+ export function getDaysInHebrewMonth(year, month) {
13
+ return HDate.daysInMonth(normalizeHebrewMonth(month), year);
14
+ }
15
+ export function getHebrewMonthName(month, year) {
16
+ return HDate.getMonthName(normalizeHebrewMonth(month), year);
17
+ }
18
+ export function getHebrewMonthNameHe(month, year) {
19
+ const normalizedMonth = normalizeHebrewMonth(month);
20
+ return (HEBREW_MONTH_NAMES_HE[normalizedMonth] ??
21
+ getHebrewMonthName(normalizedMonth, year));
22
+ }
23
+ export function getHebrewMonthNameEn(month, year) {
24
+ const normalizedMonth = normalizeHebrewMonth(month);
25
+ return (HEBREW_MONTH_NAMES_EN[normalizedMonth] ??
26
+ getHebrewMonthName(normalizedMonth, year));
27
+ }
28
+ export function getHebrewYearMonths(year) {
29
+ const first = new HDate(1, 1, year);
30
+ const monthsInYear = getMonthsInHebrewYear(year);
31
+ const result = [];
32
+ for (let i = 0; i < monthsInYear; i += 1) {
33
+ const current = first.add(i, "month");
34
+ const month = current.getMonth();
35
+ result.push({
36
+ month,
37
+ name: getHebrewMonthName(month, year),
38
+ days: getDaysInHebrewMonth(year, month),
39
+ });
40
+ }
41
+ return result;
42
+ }
43
+ //# sourceMappingURL=month-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"month-utils.js","sourceRoot":"","sources":["../src/month-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,KAAuB;IAEvB,OAAO,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAuB,EACvB,IAAY;IAEZ,OAAO,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAuB,EACvB,IAAY;IAEZ,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,CACL,qBAAqB,CAAC,eAAe,CAAC;QACtC,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAuB,EACvB,IAAY;IAEZ,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,CACL,qBAAqB,CAAC,eAAe,CAAC;QACtC,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY;IAEZ,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAyD,EAAE,CAAC;IAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK;YACL,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC;YACrC,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DualDate, DualDateInput } from "./types.js";
2
+ export declare function addGregorianDays(input: DualDateInput, amount: number): DualDate;
3
+ export declare function addGregorianMonths(input: DualDateInput, amount: number): DualDate;
4
+ export declare function addHebrewDays(input: DualDateInput, amount: number): DualDate;
5
+ export declare function addHebrewMonths(input: DualDateInput, amount: number): DualDate;
6
+ export declare function addHebrewYears(input: DualDateInput, amount: number): DualDate;
7
+ export declare function nextHebrewMonth(input: DualDateInput): DualDate;
8
+ export declare function previousHebrewMonth(input: DualDateInput): DualDate;
9
+ export declare function shiftHebrewMonth(month: number, year: number, offset: number): {
10
+ month: number;
11
+ year: number;
12
+ name: string;
13
+ };
14
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,GACb,QAAQ,CAEV;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,GACb,QAAQ,CAEV;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAG5E;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,GACb,QAAQ,CAGV;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAG7E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAG9D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAGlE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAO/C"}
@@ -0,0 +1,38 @@
1
+ import { addDays, addMonths } from "date-fns";
2
+ import { HDate } from "./hebcal-compat.js";
3
+ import { toDualDate, toHDate, toGregorian } from "./conversion.js";
4
+ export function addGregorianDays(input, amount) {
5
+ return toDualDate(addDays(toGregorian(input), amount));
6
+ }
7
+ export function addGregorianMonths(input, amount) {
8
+ return toDualDate(addMonths(toGregorian(input), amount));
9
+ }
10
+ export function addHebrewDays(input, amount) {
11
+ const hd = toHDate(input).add(amount, "day");
12
+ return toDualDate(hd);
13
+ }
14
+ export function addHebrewMonths(input, amount) {
15
+ const hd = toHDate(input).add(amount, "month");
16
+ return toDualDate(hd);
17
+ }
18
+ export function addHebrewYears(input, amount) {
19
+ const hd = toHDate(input).add(amount, "year");
20
+ return toDualDate(hd);
21
+ }
22
+ export function nextHebrewMonth(input) {
23
+ const next = toHDate(input).add(1, "month");
24
+ return toDualDate(new HDate(1, next.getMonth(), next.getFullYear()));
25
+ }
26
+ export function previousHebrewMonth(input) {
27
+ const previous = toHDate(input).add(-1, "month");
28
+ return toDualDate(new HDate(1, previous.getMonth(), previous.getFullYear()));
29
+ }
30
+ export function shiftHebrewMonth(month, year, offset) {
31
+ const shifted = new HDate(1, month, year).add(offset, "month");
32
+ return {
33
+ month: shifted.getMonth(),
34
+ year: shifted.getFullYear(),
35
+ name: shifted.getMonthName(),
36
+ };
37
+ }
38
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnE,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,MAAc;IAEd,OAAO,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAoB,EACpB,MAAc;IAEd,OAAO,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAoB,EAAE,MAAc;IAChE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,MAAc;IAEd,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,MAAc;IACjE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,IAAY,EACZ,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;QACzB,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE;QAC3B,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DualDate, DualDateInput, DualDateRange, HebrewMonthInput, MonthSegment } from "./types.js";
2
+ export declare function makeDualDateRange(start: DualDateInput, end: DualDateInput): DualDateRange;
3
+ export declare function listDualDatesInRange(start: DualDateInput, end: DualDateInput): DualDate[];
4
+ export declare function listDaysInGregorianMonth(year: number, month: number): DualDate[];
5
+ export declare function listDaysInHebrewMonth(year: number, month: HebrewMonthInput): DualDate[];
6
+ export declare function splitRangeByHebrewMonth(start: DualDateInput, end: DualDateInput): MonthSegment[];
7
+ export declare function splitRangeByGregorianMonth(start: DualDateInput, end: DualDateInput): DualDateRange[];
8
+ export declare function getHebrewMonthRange(year: number, month: HebrewMonthInput): DualDateRange;
9
+ //# sourceMappingURL=ranges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranges.d.ts","sourceRoot":"","sources":["../src/ranges.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,GACjB,aAAa,CAef;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,GACjB,QAAQ,EAAE,CAMZ;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,QAAQ,EAAE,CAGZ;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,QAAQ,EAAE,CAWZ;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,GACjB,YAAY,EAAE,CA+ChB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,GACjB,aAAa,EAAE,CA0BjB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAEf"}
package/dist/ranges.js ADDED
@@ -0,0 +1,103 @@
1
+ import { eachDayOfInterval, differenceInCalendarDays } from "date-fns";
2
+ import { HDate } from "./hebcal-compat.js";
3
+ import { getGregorianMonthBoundaries, getHebrewMonthBoundaries, } from "./boundaries.js";
4
+ import { toDualDate, toGregorian } from "./conversion.js";
5
+ import { getDaysInHebrewMonth, normalizeHebrewMonth } from "./month-utils.js";
6
+ export function makeDualDateRange(start, end) {
7
+ const startDate = toGregorian(start);
8
+ const endDate = toGregorian(end);
9
+ if (startDate > endDate) {
10
+ return {
11
+ start: toDualDate(endDate),
12
+ end: toDualDate(startDate),
13
+ };
14
+ }
15
+ return {
16
+ start: toDualDate(startDate),
17
+ end: toDualDate(endDate),
18
+ };
19
+ }
20
+ export function listDualDatesInRange(start, end) {
21
+ const range = makeDualDateRange(start, end);
22
+ return eachDayOfInterval({
23
+ start: range.start.greg,
24
+ end: range.end.greg,
25
+ }).map((date) => toDualDate(date));
26
+ }
27
+ export function listDaysInGregorianMonth(year, month) {
28
+ const bounds = getGregorianMonthBoundaries(year, month);
29
+ return listDualDatesInRange(bounds.start, bounds.end);
30
+ }
31
+ export function listDaysInHebrewMonth(year, month) {
32
+ const normalizedMonth = normalizeHebrewMonth(month);
33
+ const count = getDaysInHebrewMonth(year, normalizedMonth);
34
+ const first = new HDate(1, normalizedMonth, year);
35
+ const result = [];
36
+ for (let day = 0; day < count; day += 1) {
37
+ result.push(toDualDate(first.add(day, "day")));
38
+ }
39
+ return result;
40
+ }
41
+ export function splitRangeByHebrewMonth(start, end) {
42
+ const days = listDualDatesInRange(start, end);
43
+ if (days.length === 0) {
44
+ return [];
45
+ }
46
+ const segments = [];
47
+ const firstDay = days[0];
48
+ let segmentStart = firstDay;
49
+ let previous = firstDay;
50
+ for (const current of days.slice(1)) {
51
+ if (current.hebMonth !== previous.hebMonth ||
52
+ current.hebYear !== previous.hebYear) {
53
+ segments.push({
54
+ hebMonth: previous.hebMonth,
55
+ hebMonthName: previous.hebMonthName,
56
+ hebYear: previous.hebYear,
57
+ gregMonth: segmentStart.greg.getMonth(),
58
+ gregYear: segmentStart.greg.getFullYear(),
59
+ start: segmentStart,
60
+ end: previous,
61
+ days: differenceInCalendarDays(previous.greg, segmentStart.greg) + 1,
62
+ });
63
+ segmentStart = current;
64
+ }
65
+ previous = current;
66
+ }
67
+ const last = days[days.length - 1];
68
+ segments.push({
69
+ hebMonth: last.hebMonth,
70
+ hebMonthName: last.hebMonthName,
71
+ hebYear: last.hebYear,
72
+ gregMonth: segmentStart.greg.getMonth(),
73
+ gregYear: segmentStart.greg.getFullYear(),
74
+ start: segmentStart,
75
+ end: last,
76
+ days: differenceInCalendarDays(last.greg, segmentStart.greg) + 1,
77
+ });
78
+ return segments;
79
+ }
80
+ export function splitRangeByGregorianMonth(start, end) {
81
+ const days = listDualDatesInRange(start, end);
82
+ if (days.length === 0) {
83
+ return [];
84
+ }
85
+ const ranges = [];
86
+ const firstDay = days[0];
87
+ let currentStart = firstDay;
88
+ let previous = firstDay;
89
+ for (const current of days.slice(1)) {
90
+ if (current.greg.getMonth() !== previous.greg.getMonth() ||
91
+ current.greg.getFullYear() !== previous.greg.getFullYear()) {
92
+ ranges.push({ start: currentStart, end: previous });
93
+ currentStart = current;
94
+ }
95
+ previous = current;
96
+ }
97
+ ranges.push({ start: currentStart, end: previous });
98
+ return ranges;
99
+ }
100
+ export function getHebrewMonthRange(year, month) {
101
+ return getHebrewMonthBoundaries(year, month);
102
+ }
103
+ //# sourceMappingURL=ranges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranges.js","sourceRoot":"","sources":["../src/ranges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import type { HDate } from "./hebcal-compat.js";
2
+ export type HebrewMonthInput = number | string;
3
+ export interface HebrewDateParts {
4
+ day: number;
5
+ month: HebrewMonthInput;
6
+ year: number;
7
+ }
8
+ export interface DualDate {
9
+ greg: Date;
10
+ heb: HDate;
11
+ hebDay: number;
12
+ hebMonth: number;
13
+ hebYear: number;
14
+ hebMonthName: string;
15
+ hebString: string;
16
+ hebDisplay: string;
17
+ }
18
+ export type DualDateInput = Date | HDate | DualDate | HebrewDateParts;
19
+ export interface DualDateRange {
20
+ start: DualDate;
21
+ end: DualDate;
22
+ }
23
+ export interface MonthSegment {
24
+ hebMonth: number;
25
+ hebMonthName: string;
26
+ hebYear: number;
27
+ gregMonth: number;
28
+ gregYear: number;
29
+ start: DualDate;
30
+ end: DualDate;
31
+ days: number;
32
+ }
33
+ export interface HebrewMonthInfo {
34
+ month: number;
35
+ name: string;
36
+ nameHe: string;
37
+ daysInMonth: number;
38
+ year: number;
39
+ isLeapYear: boolean;
40
+ firstDay: DualDate;
41
+ lastDay: DualDate;
42
+ }
43
+ export interface GregorianMonthInfo {
44
+ month: number;
45
+ year: number;
46
+ name: string;
47
+ daysInMonth: number;
48
+ firstDay: DualDate;
49
+ lastDay: DualDate;
50
+ hebrewMonths: Array<{
51
+ month: number;
52
+ year: number;
53
+ name: string;
54
+ }>;
55
+ }
56
+ export interface HolidayInfo {
57
+ id: string;
58
+ name: string;
59
+ displayName: string;
60
+ date: DualDate;
61
+ categories: string[];
62
+ flags: number;
63
+ observedInIsrael: boolean;
64
+ observedInDiaspora: boolean;
65
+ url?: string;
66
+ }
67
+ export interface HolidayQueryOptions {
68
+ il?: boolean;
69
+ locale?: string;
70
+ noMinorFast?: boolean;
71
+ noModern?: boolean;
72
+ noRoshChodesh?: boolean;
73
+ noSpecialShabbat?: boolean;
74
+ }
75
+ export interface HebrewYearInfo {
76
+ year: number;
77
+ isLeapYear: boolean;
78
+ monthsInYear: number;
79
+ daysInYear: number;
80
+ longCheshvan: boolean;
81
+ shortKislev: boolean;
82
+ firstDay: DualDate;
83
+ lastDay: DualDate;
84
+ }
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/dist/year.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { DualDate, HebrewYearInfo } from "./types.js";
2
+ export declare function getCurrentDualDate(referenceDate?: Date): DualDate;
3
+ export declare function getCurrentHebrewYear(referenceDate?: Date): number;
4
+ export declare function getHebrewYearInfo(year: number): HebrewYearInfo;
5
+ export declare function getHebrewYearForGregorianYear(gregorianYear: number): number;
6
+ //# sourceMappingURL=year.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"year.d.ts","sourceRoot":"","sources":["../src/year.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,aAAa,GAAE,IAAiB,GAAG,QAAQ,CAE7E;AAED,wBAAgB,oBAAoB,CAAC,aAAa,GAAE,IAAiB,GAAG,MAAM,CAE7E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAe9D;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE3E"}
package/dist/year.js ADDED
@@ -0,0 +1,27 @@
1
+ import { HDate, months } from "./hebcal-compat.js";
2
+ import { toDualDate } from "./conversion.js";
3
+ export function getCurrentDualDate(referenceDate = new Date()) {
4
+ return toDualDate(referenceDate);
5
+ }
6
+ export function getCurrentHebrewYear(referenceDate = new Date()) {
7
+ return new HDate(referenceDate).getFullYear();
8
+ }
9
+ export function getHebrewYearInfo(year) {
10
+ const firstDay = toDualDate(new HDate(1, months.TISHREI, year));
11
+ const lastDayOfElul = HDate.daysInMonth(months.ELUL, year);
12
+ const lastDay = toDualDate(new HDate(lastDayOfElul, months.ELUL, year));
13
+ return {
14
+ year,
15
+ isLeapYear: HDate.isLeapYear(year),
16
+ monthsInYear: HDate.monthsInYear(year),
17
+ daysInYear: HDate.daysInYear(year),
18
+ longCheshvan: HDate.longCheshvan(year),
19
+ shortKislev: HDate.shortKislev(year),
20
+ firstDay,
21
+ lastDay,
22
+ };
23
+ }
24
+ export function getHebrewYearForGregorianYear(gregorianYear) {
25
+ return new HDate(new Date(gregorianYear, 0, 1)).getFullYear();
26
+ }
27
+ //# sourceMappingURL=year.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"year.js","sourceRoot":"","sources":["../src/year.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,UAAU,kBAAkB,CAAC,gBAAsB,IAAI,IAAI,EAAE;IACjE,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,gBAAsB,IAAI,IAAI,EAAE;IACnE,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAExE,OAAO;QACL,IAAI;QACJ,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;QACtC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;QACpC,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,aAAqB;IACjE,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE,CAAC"}