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.
- package/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +148 -0
- package/dist/arithmetic.d.ts +7 -0
- package/dist/arithmetic.d.ts.map +1 -0
- package/dist/arithmetic.js +34 -0
- package/dist/arithmetic.js.map +1 -0
- package/dist/boundaries.d.ts +8 -0
- package/dist/boundaries.d.ts.map +1 -0
- package/dist/boundaries.js +31 -0
- package/dist/boundaries.js.map +1 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +63 -0
- package/dist/constants.js.map +1 -0
- package/dist/conversion.d.ts +9 -0
- package/dist/conversion.d.ts.map +1 -0
- package/dist/conversion.js +67 -0
- package/dist/conversion.js.map +1 -0
- package/dist/formatting.d.ts +13 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +25 -0
- package/dist/formatting.js.map +1 -0
- package/dist/hebcal-compat.d.ts +2 -0
- package/dist/hebcal-compat.d.ts.map +1 -0
- package/dist/hebcal-compat.js +2 -0
- package/dist/hebcal-compat.js.map +1 -0
- package/dist/holidays.d.ts +6 -0
- package/dist/holidays.d.ts.map +1 -0
- package/dist/holidays.js +59 -0
- package/dist/holidays.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/info.d.ts +4 -0
- package/dist/info.d.ts.map +1 -0
- package/dist/info.js +43 -0
- package/dist/info.js.map +1 -0
- package/dist/membership.d.ts +8 -0
- package/dist/membership.d.ts.map +1 -0
- package/dist/membership.js +33 -0
- package/dist/membership.js.map +1 -0
- package/dist/month-utils.d.ts +14 -0
- package/dist/month-utils.d.ts.map +1 -0
- package/dist/month-utils.js +43 -0
- package/dist/month-utils.js.map +1 -0
- package/dist/navigation.d.ts +14 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +38 -0
- package/dist/navigation.js.map +1 -0
- package/dist/ranges.d.ts +9 -0
- package/dist/ranges.d.ts.map +1 -0
- package/dist/ranges.js +103 -0
- package/dist/ranges.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/year.d.ts +6 -0
- package/dist/year.d.ts.map +1 -0
- package/dist/year.js +27 -0
- package/dist/year.js.map +1 -0
- package/package.json +119 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on Keep a Changelog and this project follows Semantic Versioning.
|
|
6
|
+
|
|
7
|
+
## [0.1.0] - 2026-04-05
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Initial ESM TypeScript package scaffold
|
|
12
|
+
- DualDate model and conversion helpers
|
|
13
|
+
- Hebrew/Gregorian month utilities and boundaries
|
|
14
|
+
- Range iteration and segmentation helpers
|
|
15
|
+
- Month info, membership, and navigation utilities
|
|
16
|
+
- Formatting helpers for Hebrew and Gregorian output
|
|
17
|
+
- Holiday APIs (Israel and Diaspora support)
|
|
18
|
+
- Birthday and yahrzeit helpers
|
|
19
|
+
- Test suite for core flows
|
|
20
|
+
- Documentation: README, API reference, publishing guide
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# hebrew-date-utils
|
|
2
|
+
|
|
3
|
+
Date-only Hebrew/Gregorian utility toolkit built on top of @hebcal/core and date-fns.
|
|
4
|
+
|
|
5
|
+
EN: This package is an extension layer for practical date workflows.
|
|
6
|
+
HE: החבילה היא שכבת הרחבה נוחה לעבודה עם תאריכים עבריים ולועזיים.
|
|
7
|
+
|
|
8
|
+
## Why This Package
|
|
9
|
+
|
|
10
|
+
- Focused, composable helpers for Hebrew/Gregorian date logic
|
|
11
|
+
- Consistent DualDate model for working with both calendars at once
|
|
12
|
+
- Practical APIs for month boundaries, ranges, holidays, birthday, and yahrzeit
|
|
13
|
+
- Built on stable upstream rules from @hebcal/core
|
|
14
|
+
|
|
15
|
+
## Scope
|
|
16
|
+
|
|
17
|
+
Included:
|
|
18
|
+
|
|
19
|
+
- Hebrew <-> Gregorian conversions
|
|
20
|
+
- Hebrew/Gregorian month boundaries and date ranges
|
|
21
|
+
- Month metadata and navigation
|
|
22
|
+
- Holiday queries (Israel and Diaspora)
|
|
23
|
+
- Birthday and yahrzeit helpers
|
|
24
|
+
|
|
25
|
+
Excluded:
|
|
26
|
+
|
|
27
|
+
- Zmanim calculations (sunrise/sunset/candle-lighting)
|
|
28
|
+
- UI components (React package is out of scope for this core package)
|
|
29
|
+
|
|
30
|
+
## Installation | התקנה
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install hebrew-date-utils
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Requirements:
|
|
37
|
+
|
|
38
|
+
- Node.js 18+
|
|
39
|
+
- ESM runtime
|
|
40
|
+
|
|
41
|
+
## Quick Start
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import {
|
|
45
|
+
toDualDate,
|
|
46
|
+
getHebrewMonthInfo,
|
|
47
|
+
getHolidaysOn,
|
|
48
|
+
getBirthdayInHebrewYear,
|
|
49
|
+
formatDualDate,
|
|
50
|
+
} from "hebrew-date-utils";
|
|
51
|
+
|
|
52
|
+
const dual = toDualDate(new Date(2026, 3, 5));
|
|
53
|
+
console.log(dual.hebString);
|
|
54
|
+
console.log(formatDualDate(dual));
|
|
55
|
+
|
|
56
|
+
const monthInfo = getHebrewMonthInfo(5786, dual.hebMonth);
|
|
57
|
+
console.log(monthInfo.name, monthInfo.daysInMonth);
|
|
58
|
+
|
|
59
|
+
const holidays = getHolidaysOn(new Date(2026, 8, 12), { il: true });
|
|
60
|
+
console.log(holidays.map((h) => h.displayName));
|
|
61
|
+
|
|
62
|
+
const birthday = getBirthdayInHebrewYear(new Date(2014, 2, 2), 5787);
|
|
63
|
+
console.log(birthday?.hebString);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Common Usage Patterns
|
|
67
|
+
|
|
68
|
+
### 1. Convert and normalize input dates
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { toDualDate, toGregorian, toHDate } from "hebrew-date-utils";
|
|
72
|
+
|
|
73
|
+
const dual = toDualDate({ day: 1, month: "Tishrei", year: 5787 });
|
|
74
|
+
const greg = toGregorian(dual);
|
|
75
|
+
const heb = toHDate(greg);
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 2. Split ranges by Hebrew months
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import { splitRangeByHebrewMonth } from "hebrew-date-utils";
|
|
82
|
+
|
|
83
|
+
const segments = splitRangeByHebrewMonth(
|
|
84
|
+
new Date(2026, 8, 1),
|
|
85
|
+
new Date(2026, 10, 15),
|
|
86
|
+
);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 3. Query holidays for Israel vs Diaspora
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { getHolidaysOn } from "hebrew-date-utils";
|
|
93
|
+
|
|
94
|
+
const date = new Date(2026, 4, 23);
|
|
95
|
+
const il = getHolidaysOn(date, { il: true });
|
|
96
|
+
const diaspora = getHolidaysOn(date, { il: false });
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## API Modules
|
|
100
|
+
|
|
101
|
+
- types
|
|
102
|
+
- constants
|
|
103
|
+
- conversion
|
|
104
|
+
- month-utils
|
|
105
|
+
- boundaries
|
|
106
|
+
- ranges
|
|
107
|
+
- info
|
|
108
|
+
- membership
|
|
109
|
+
- navigation
|
|
110
|
+
- formatting
|
|
111
|
+
- holidays
|
|
112
|
+
- year
|
|
113
|
+
- arithmetic
|
|
114
|
+
|
|
115
|
+
Detailed function reference: see docs/API.md
|
|
116
|
+
|
|
117
|
+
## Core Compatibility Exports
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
import { HDate, months, HebrewCalendar } from "hebrew-date-utils";
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Time Behavior
|
|
124
|
+
|
|
125
|
+
- The library uses local system time for date boundary behavior.
|
|
126
|
+
- All Date outputs are normalized to local date boundaries.
|
|
127
|
+
- Around midnight and timezone transitions, verify behavior with your runtime locale.
|
|
128
|
+
|
|
129
|
+
## Development
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm run typecheck
|
|
133
|
+
npm test
|
|
134
|
+
npm run build
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Publish Readiness
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npm run release:check
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Publishing guide: see docs/PUBLISHING.md
|
|
144
|
+
|
|
145
|
+
## Versioning
|
|
146
|
+
|
|
147
|
+
- Current line is 0.x for API stabilization.
|
|
148
|
+
- Breaking changes may occur between minor versions while API is hardening.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DualDate, DualDateInput } from "./types.js";
|
|
2
|
+
export declare function differenceInDualDays(left: DualDateInput, right: DualDateInput): number;
|
|
3
|
+
export declare function getBirthdayInHebrewYear(originalDate: DualDateInput, targetHebrewYear: number): DualDate | null;
|
|
4
|
+
export declare function getYahrzeitInHebrewYear(dateOfDeath: DualDateInput, targetHebrewYear: number): DualDate | null;
|
|
5
|
+
export declare function getGregorianAge(birthDate: Date, atDate?: Date): number;
|
|
6
|
+
export declare function getHebrewAge(originalDate: DualDateInput, atDate?: DualDateInput): number;
|
|
7
|
+
//# sourceMappingURL=arithmetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../src/arithmetic.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,aAAa,GACnB,MAAM,CAER;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,aAAa,EAC3B,gBAAgB,EAAE,MAAM,GACvB,QAAQ,GAAG,IAAI,CAMjB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,aAAa,EAC1B,gBAAgB,EAAE,MAAM,GACvB,QAAQ,GAAG,IAAI,CAMjB;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,IAAI,EACf,MAAM,GAAE,IAAiB,GACxB,MAAM,CAUR;AAED,wBAAgB,YAAY,CAC1B,YAAY,EAAE,aAAa,EAC3B,MAAM,GAAE,aAA0B,GACjC,MAAM,CAeR"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { differenceInCalendarDays } from "date-fns";
|
|
2
|
+
import { HebrewCalendar } from "./hebcal-compat.js";
|
|
3
|
+
import { toDualDate, toGregorian, toHDate } from "./conversion.js";
|
|
4
|
+
export function differenceInDualDays(left, right) {
|
|
5
|
+
return differenceInCalendarDays(toGregorian(left), toGregorian(right));
|
|
6
|
+
}
|
|
7
|
+
export function getBirthdayInHebrewYear(originalDate, targetHebrewYear) {
|
|
8
|
+
const computed = HebrewCalendar.getBirthdayOrAnniversary(targetHebrewYear, toHDate(originalDate));
|
|
9
|
+
return computed ? toDualDate(computed) : null;
|
|
10
|
+
}
|
|
11
|
+
export function getYahrzeitInHebrewYear(dateOfDeath, targetHebrewYear) {
|
|
12
|
+
const computed = HebrewCalendar.getYahrzeit(targetHebrewYear, toHDate(dateOfDeath));
|
|
13
|
+
return computed ? toDualDate(computed) : null;
|
|
14
|
+
}
|
|
15
|
+
export function getGregorianAge(birthDate, atDate = new Date()) {
|
|
16
|
+
const birthYear = birthDate.getFullYear();
|
|
17
|
+
const hasBirthdayOccurred = atDate.getMonth() > birthDate.getMonth() ||
|
|
18
|
+
(atDate.getMonth() === birthDate.getMonth() &&
|
|
19
|
+
atDate.getDate() >= birthDate.getDate());
|
|
20
|
+
return hasBirthdayOccurred
|
|
21
|
+
? atDate.getFullYear() - birthYear
|
|
22
|
+
: atDate.getFullYear() - birthYear - 1;
|
|
23
|
+
}
|
|
24
|
+
export function getHebrewAge(originalDate, atDate = new Date()) {
|
|
25
|
+
const birth = toDualDate(originalDate);
|
|
26
|
+
const target = toDualDate(atDate);
|
|
27
|
+
let age = target.hebYear - birth.hebYear;
|
|
28
|
+
const birthdayThisYear = HebrewCalendar.getBirthdayOrAnniversary(target.hebYear, birth.heb);
|
|
29
|
+
if (birthdayThisYear && birthdayThisYear.greg() > target.greg) {
|
|
30
|
+
age -= 1;
|
|
31
|
+
}
|
|
32
|
+
return Math.max(age, 0);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=arithmetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmetic.js","sourceRoot":"","sources":["../src/arithmetic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGnE,MAAM,UAAU,oBAAoB,CAClC,IAAmB,EACnB,KAAoB;IAEpB,OAAO,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAA2B,EAC3B,gBAAwB;IAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,wBAAwB,CACtD,gBAAgB,EAChB,OAAO,CAAC,YAAY,CAAC,CACtB,CAAC;IACF,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAA0B,EAC1B,gBAAwB;IAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CACzC,gBAAgB,EAChB,OAAO,CAAC,WAAW,CAAC,CACrB,CAAC;IACF,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAe,EACf,SAAe,IAAI,IAAI,EAAE;IAEzB,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,mBAAmB,GACvB,MAAM,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE;QACxC,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE;YACzC,MAAM,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAE7C,OAAO,mBAAmB;QACxB,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,SAAS;QAClC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,YAA2B,EAC3B,SAAwB,IAAI,IAAI,EAAE;IAElC,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACzC,MAAM,gBAAgB,GAAG,cAAc,CAAC,wBAAwB,CAC9D,MAAM,CAAC,OAAO,EACd,KAAK,CAAC,GAAG,CACV,CAAC;IAEF,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9D,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DualDate, DualDateRange, HebrewMonthInput } from "./types.js";
|
|
2
|
+
export declare function getGregorianMonthFirstDay(year: number, month: number): DualDate;
|
|
3
|
+
export declare function getGregorianMonthLastDay(year: number, month: number): DualDate;
|
|
4
|
+
export declare function getGregorianMonthBoundaries(year: number, month: number): DualDateRange;
|
|
5
|
+
export declare function getHebrewMonthFirstDay(year: number, month: HebrewMonthInput): DualDate;
|
|
6
|
+
export declare function getHebrewMonthLastDay(year: number, month: HebrewMonthInput): DualDate;
|
|
7
|
+
export declare function getHebrewMonthBoundaries(year: number, month: HebrewMonthInput): DualDateRange;
|
|
8
|
+
//# sourceMappingURL=boundaries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE5E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,QAAQ,CAEV;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,QAAQ,CAEV;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,aAAa,CAKf;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,QAAQ,CAEV;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,QAAQ,CAIV;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAKf"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { endOfMonth, startOfMonth } from "date-fns";
|
|
2
|
+
import { HDate } from "./hebcal-compat.js";
|
|
3
|
+
import { toDualDate } from "./conversion.js";
|
|
4
|
+
import { getDaysInHebrewMonth, normalizeHebrewMonth } from "./month-utils.js";
|
|
5
|
+
export function getGregorianMonthFirstDay(year, month) {
|
|
6
|
+
return toDualDate(startOfMonth(new Date(year, month, 1)));
|
|
7
|
+
}
|
|
8
|
+
export function getGregorianMonthLastDay(year, month) {
|
|
9
|
+
return toDualDate(endOfMonth(new Date(year, month, 1)));
|
|
10
|
+
}
|
|
11
|
+
export function getGregorianMonthBoundaries(year, month) {
|
|
12
|
+
return {
|
|
13
|
+
start: getGregorianMonthFirstDay(year, month),
|
|
14
|
+
end: getGregorianMonthLastDay(year, month),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function getHebrewMonthFirstDay(year, month) {
|
|
18
|
+
return toDualDate(new HDate(1, normalizeHebrewMonth(month), year));
|
|
19
|
+
}
|
|
20
|
+
export function getHebrewMonthLastDay(year, month) {
|
|
21
|
+
const normalizedMonth = normalizeHebrewMonth(month);
|
|
22
|
+
const lastDay = getDaysInHebrewMonth(year, normalizedMonth);
|
|
23
|
+
return toDualDate(new HDate(lastDay, normalizedMonth, year));
|
|
24
|
+
}
|
|
25
|
+
export function getHebrewMonthBoundaries(year, month) {
|
|
26
|
+
return {
|
|
27
|
+
start: getHebrewMonthFirstDay(year, month),
|
|
28
|
+
end: getHebrewMonthLastDay(year, month),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=boundaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundaries.js","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,MAAM,UAAU,yBAAyB,CACvC,IAAY,EACZ,KAAa;IAEb,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,KAAa;IAEb,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,KAAa;IAEb,OAAO;QACL,KAAK,EAAE,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7C,GAAG,EAAE,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,KAAuB;IAEvB,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,KAAuB;IAEvB,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC5D,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,KAAuB;IAEvB,OAAO;QACL,KAAK,EAAE,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1C,GAAG,EAAE,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const DEFAULT_HEBREW_RENDER_LOCALE = "en";
|
|
2
|
+
export declare const DEFAULT_GREGORIAN_LOCALE = "en-US";
|
|
3
|
+
export declare const GREGORIAN_MONTH_NAMES_EN: readonly ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
4
|
+
export declare const HEBREW_MONTH_NAMES_EN: Record<number, string>;
|
|
5
|
+
export declare const HEBREW_MONTH_NAMES_HE: Record<number, string>;
|
|
6
|
+
export declare const HEBREW_MONTH_ORDER: readonly [any, any, any, any, any, any, any, any, any, any, any, any, any];
|
|
7
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,eAAO,MAAM,wBAAwB,qIAa3B,CAAC;AAEX,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAcxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAcxD,CAAC;AAEF,eAAO,MAAM,kBAAkB,4EAcrB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { months } from "./hebcal-compat.js";
|
|
2
|
+
export const DEFAULT_HEBREW_RENDER_LOCALE = "en";
|
|
3
|
+
export const DEFAULT_GREGORIAN_LOCALE = "en-US";
|
|
4
|
+
export const GREGORIAN_MONTH_NAMES_EN = [
|
|
5
|
+
"January",
|
|
6
|
+
"February",
|
|
7
|
+
"March",
|
|
8
|
+
"April",
|
|
9
|
+
"May",
|
|
10
|
+
"June",
|
|
11
|
+
"July",
|
|
12
|
+
"August",
|
|
13
|
+
"September",
|
|
14
|
+
"October",
|
|
15
|
+
"November",
|
|
16
|
+
"December",
|
|
17
|
+
];
|
|
18
|
+
export const HEBREW_MONTH_NAMES_EN = {
|
|
19
|
+
[months.NISAN]: "Nisan",
|
|
20
|
+
[months.IYYAR]: "Iyyar",
|
|
21
|
+
[months.SIVAN]: "Sivan",
|
|
22
|
+
[months.TAMUZ]: "Tamuz",
|
|
23
|
+
[months.AV]: "Av",
|
|
24
|
+
[months.ELUL]: "Elul",
|
|
25
|
+
[months.TISHREI]: "Tishrei",
|
|
26
|
+
[months.CHESHVAN]: "Cheshvan",
|
|
27
|
+
[months.KISLEV]: "Kislev",
|
|
28
|
+
[months.TEVET]: "Tevet",
|
|
29
|
+
[months.SHVAT]: "Sh'vat",
|
|
30
|
+
[months.ADAR_I]: "Adar",
|
|
31
|
+
[months.ADAR_II]: "Adar II",
|
|
32
|
+
};
|
|
33
|
+
export const HEBREW_MONTH_NAMES_HE = {
|
|
34
|
+
[months.NISAN]: "Nisan",
|
|
35
|
+
[months.IYYAR]: "Iyar",
|
|
36
|
+
[months.SIVAN]: "Sivan",
|
|
37
|
+
[months.TAMUZ]: "Tamuz",
|
|
38
|
+
[months.AV]: "Av",
|
|
39
|
+
[months.ELUL]: "Elul",
|
|
40
|
+
[months.TISHREI]: "Tishrei",
|
|
41
|
+
[months.CHESHVAN]: "Cheshvan",
|
|
42
|
+
[months.KISLEV]: "Kislev",
|
|
43
|
+
[months.TEVET]: "Tevet",
|
|
44
|
+
[months.SHVAT]: "Shevat",
|
|
45
|
+
[months.ADAR_I]: "Adar",
|
|
46
|
+
[months.ADAR_II]: "Adar II",
|
|
47
|
+
};
|
|
48
|
+
export const HEBREW_MONTH_ORDER = [
|
|
49
|
+
months.NISAN,
|
|
50
|
+
months.IYYAR,
|
|
51
|
+
months.SIVAN,
|
|
52
|
+
months.TAMUZ,
|
|
53
|
+
months.AV,
|
|
54
|
+
months.ELUL,
|
|
55
|
+
months.TISHREI,
|
|
56
|
+
months.CHESHVAN,
|
|
57
|
+
months.KISLEV,
|
|
58
|
+
months.TEVET,
|
|
59
|
+
months.SHVAT,
|
|
60
|
+
months.ADAR_I,
|
|
61
|
+
months.ADAR_II,
|
|
62
|
+
];
|
|
63
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEhD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI;IACjB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM;IACrB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS;IAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC7B,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;IACzB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ;IACxB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM;IACvB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM;IACtB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI;IACjB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM;IACrB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS;IAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC7B,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;IACzB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;IACvB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ;IACxB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM;IACvB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,CAAC,KAAK;IACZ,MAAM,CAAC,KAAK;IACZ,MAAM,CAAC,KAAK;IACZ,MAAM,CAAC,KAAK;IACZ,MAAM,CAAC,EAAE;IACT,MAAM,CAAC,IAAI;IACX,MAAM,CAAC,OAAO;IACd,MAAM,CAAC,QAAQ;IACf,MAAM,CAAC,MAAM;IACb,MAAM,CAAC,KAAK;IACZ,MAAM,CAAC,KAAK;IACZ,MAAM,CAAC,MAAM;IACb,MAAM,CAAC,OAAO;CACN,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { HDate } from "./hebcal-compat.js";
|
|
2
|
+
import type { DualDate, DualDateInput } from "./types.js";
|
|
3
|
+
export declare function toHDate(input: DualDateInput): HDate;
|
|
4
|
+
export declare function toGregorian(input: DualDateInput): Date;
|
|
5
|
+
export declare function toDualDate(input: DualDateInput): DualDate;
|
|
6
|
+
export declare function fromGregorianDate(date: Date): DualDate;
|
|
7
|
+
export declare function fromHebrewDate(day: number, month: number | string, year: number): DualDate;
|
|
8
|
+
export declare function todayDualDate(referenceDate?: Date): DualDate;
|
|
9
|
+
//# sourceMappingURL=conversion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../src/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AA0B3E,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK,CAkBnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAUtD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAczD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAEtD;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,GACX,QAAQ,CAEV;AAED,wBAAgB,aAAa,CAAC,aAAa,GAAE,IAAiB,GAAG,QAAQ,CAExE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { HDate } from "./hebcal-compat.js";
|
|
2
|
+
function isDate(value) {
|
|
3
|
+
return value instanceof Date;
|
|
4
|
+
}
|
|
5
|
+
function isDualDate(value) {
|
|
6
|
+
if (!value || typeof value !== "object") {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
return "greg" in value && "heb" in value;
|
|
10
|
+
}
|
|
11
|
+
function isHebrewDateParts(value) {
|
|
12
|
+
if (!value || typeof value !== "object") {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return "day" in value && "month" in value && "year" in value;
|
|
16
|
+
}
|
|
17
|
+
function normalizeLocalDate(date) {
|
|
18
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
19
|
+
}
|
|
20
|
+
export function toHDate(input) {
|
|
21
|
+
if (isDualDate(input)) {
|
|
22
|
+
return new HDate(input.heb);
|
|
23
|
+
}
|
|
24
|
+
if (HDate.isHDate(input)) {
|
|
25
|
+
return new HDate(input);
|
|
26
|
+
}
|
|
27
|
+
if (isDate(input)) {
|
|
28
|
+
return new HDate(normalizeLocalDate(input));
|
|
29
|
+
}
|
|
30
|
+
if (isHebrewDateParts(input)) {
|
|
31
|
+
return new HDate(input.day, input.month, input.year);
|
|
32
|
+
}
|
|
33
|
+
return new HDate();
|
|
34
|
+
}
|
|
35
|
+
export function toGregorian(input) {
|
|
36
|
+
if (isDualDate(input)) {
|
|
37
|
+
return normalizeLocalDate(input.greg);
|
|
38
|
+
}
|
|
39
|
+
if (isDate(input)) {
|
|
40
|
+
return normalizeLocalDate(input);
|
|
41
|
+
}
|
|
42
|
+
return normalizeLocalDate(toHDate(input).greg());
|
|
43
|
+
}
|
|
44
|
+
export function toDualDate(input) {
|
|
45
|
+
const heb = toHDate(input);
|
|
46
|
+
const greg = normalizeLocalDate(heb.greg());
|
|
47
|
+
return {
|
|
48
|
+
greg,
|
|
49
|
+
heb,
|
|
50
|
+
hebDay: heb.getDate(),
|
|
51
|
+
hebMonth: heb.getMonth(),
|
|
52
|
+
hebYear: heb.getFullYear(),
|
|
53
|
+
hebMonthName: heb.getMonthName(),
|
|
54
|
+
hebString: heb.toString(),
|
|
55
|
+
hebDisplay: heb.renderGematriya(true),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function fromGregorianDate(date) {
|
|
59
|
+
return toDualDate(date);
|
|
60
|
+
}
|
|
61
|
+
export function fromHebrewDate(day, month, year) {
|
|
62
|
+
return toDualDate({ day, month, year });
|
|
63
|
+
}
|
|
64
|
+
export function todayDualDate(referenceDate = new Date()) {
|
|
65
|
+
return toDualDate(referenceDate);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=conversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion.js","sourceRoot":"","sources":["../src/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,YAAY,IAAI,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AAC/D,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAU;IACpC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAoB;IAC1C,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAoB;IAC9C,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAoB;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,IAAI;QACJ,GAAG;QACH,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE;QACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;QACxB,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE;QAC1B,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE;QAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE;QACzB,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAU;IAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,KAAsB,EACtB,IAAY;IAEZ,OAAO,UAAU,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,gBAAsB,IAAI,IAAI,EAAE;IAC5D,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DualDateInput } from "./types.js";
|
|
2
|
+
export interface HebrewFormatOptions {
|
|
3
|
+
locale?: string;
|
|
4
|
+
showYear?: boolean;
|
|
5
|
+
gematriya?: boolean;
|
|
6
|
+
suppressNikud?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function formatGregorian(input: DualDateInput, pattern?: string): string;
|
|
9
|
+
export declare function formatHebrew(input: DualDateInput, options?: HebrewFormatOptions): string;
|
|
10
|
+
export declare function formatDualDate(input: DualDateInput, gregorianPattern?: string): string;
|
|
11
|
+
export declare function getWeekdayName(input: DualDateInput, locale?: string, style?: Intl.DateTimeFormatOptions["weekday"]): string;
|
|
12
|
+
export declare function toIsoDate(input: DualDateInput): string;
|
|
13
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../src/formatting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,OAAO,SAAe,GACrB,MAAM,CAER;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAeR;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,gBAAgB,SAAe,GAC9B,MAAM,CAGR;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,MAAM,SAA2B,EACjC,KAAK,GAAE,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAU,GACpD,MAAM,CAIR;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { format as formatGregorianDateFn } from "date-fns";
|
|
2
|
+
import { DEFAULT_GREGORIAN_LOCALE } from "./constants.js";
|
|
3
|
+
import { toDualDate, toGregorian, toHDate } from "./conversion.js";
|
|
4
|
+
export function formatGregorian(input, pattern = "yyyy-MM-dd") {
|
|
5
|
+
return formatGregorianDateFn(toGregorian(input), pattern);
|
|
6
|
+
}
|
|
7
|
+
export function formatHebrew(input, options = {}) {
|
|
8
|
+
const { locale = "en", showYear = true, gematriya = false, suppressNikud = true, } = options;
|
|
9
|
+
const hebDate = toHDate(input);
|
|
10
|
+
if (gematriya) {
|
|
11
|
+
return hebDate.renderGematriya(suppressNikud, !showYear);
|
|
12
|
+
}
|
|
13
|
+
return hebDate.render(locale, showYear);
|
|
14
|
+
}
|
|
15
|
+
export function formatDualDate(input, gregorianPattern = "yyyy-MM-dd") {
|
|
16
|
+
const dual = toDualDate(input);
|
|
17
|
+
return `${formatGregorianDateFn(dual.greg, gregorianPattern)} | ${dual.hebString}`;
|
|
18
|
+
}
|
|
19
|
+
export function getWeekdayName(input, locale = DEFAULT_GREGORIAN_LOCALE, style = "long") {
|
|
20
|
+
return new Intl.DateTimeFormat(locale, { weekday: style }).format(toGregorian(input));
|
|
21
|
+
}
|
|
22
|
+
export function toIsoDate(input) {
|
|
23
|
+
return formatGregorian(input, "yyyy-MM-dd");
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../src/formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAUnE,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,OAAO,GAAG,YAAY;IAEtB,OAAO,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAoB,EACpB,UAA+B,EAAE;IAEjC,MAAM,EACJ,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,KAAK,EACjB,aAAa,GAAG,IAAI,GACrB,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAoB,EACpB,gBAAgB,GAAG,YAAY;IAE/B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAoB,EACpB,MAAM,GAAG,wBAAwB,EACjC,QAA+C,MAAM;IAErD,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAC/D,WAAW,CAAC,KAAK,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAoB;IAC5C,OAAO,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hebcal-compat.d.ts","sourceRoot":"","sources":["../src/hebcal-compat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,cAAc,EACd,MAAM,EACN,KAAK,EACL,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hebcal-compat.js","sourceRoot":"","sources":["../src/hebcal-compat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,cAAc,EACd,MAAM,EACN,KAAK,GAIN,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DualDateInput, HolidayInfo, HolidayQueryOptions } from "./types.js";
|
|
2
|
+
export declare function getHolidaysOn(date: DualDateInput, options?: HolidayQueryOptions): HolidayInfo[];
|
|
3
|
+
export declare function getHolidaysForHebrewYear(year: number, options?: HolidayQueryOptions): HolidayInfo[];
|
|
4
|
+
export declare function getHolidaysBetween(start: DualDateInput, end: DualDateInput, options?: HolidayQueryOptions): HolidayInfo[];
|
|
5
|
+
export declare function isHoliday(date: DualDateInput, options?: HolidayQueryOptions): boolean;
|
|
6
|
+
//# sourceMappingURL=holidays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holidays.d.ts","sourceRoot":"","sources":["../src/holidays.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAuCpB,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,mBAAwB,GAChC,WAAW,EAAE,CAKf;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,WAAW,EAAE,CAOf;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,mBAAwB,GAChC,WAAW,EAAE,CAWf;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAET"}
|
package/dist/holidays.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { HebrewCalendar, } from "./hebcal-compat.js";
|
|
2
|
+
import { toDualDate, toGregorian, toHDate } from "./conversion.js";
|
|
3
|
+
function toHolidayInfo(event, locale) {
|
|
4
|
+
const dualDate = toDualDate(event.getDate());
|
|
5
|
+
return {
|
|
6
|
+
id: `${dualDate.hebYear}-${dualDate.hebMonth}-${dualDate.hebDay}-${event.getDesc()}`,
|
|
7
|
+
name: event.getDesc(),
|
|
8
|
+
displayName: event.render(locale),
|
|
9
|
+
date: dualDate,
|
|
10
|
+
categories: event.getCategories(),
|
|
11
|
+
flags: event.getFlags(),
|
|
12
|
+
observedInIsrael: event.observedInIsrael(),
|
|
13
|
+
observedInDiaspora: event.observedInDiaspora(),
|
|
14
|
+
url: event.url(),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function buildCalendarOptions(options) {
|
|
18
|
+
const base = { candlelighting: false };
|
|
19
|
+
if (typeof options.il === "boolean") {
|
|
20
|
+
base.il = options.il;
|
|
21
|
+
}
|
|
22
|
+
if (typeof options.noMinorFast === "boolean") {
|
|
23
|
+
base.noMinorFast = options.noMinorFast;
|
|
24
|
+
}
|
|
25
|
+
if (typeof options.noModern === "boolean") {
|
|
26
|
+
base.noModern = options.noModern;
|
|
27
|
+
}
|
|
28
|
+
if (typeof options.noRoshChodesh === "boolean") {
|
|
29
|
+
base.noRoshChodesh = options.noRoshChodesh;
|
|
30
|
+
}
|
|
31
|
+
if (typeof options.noSpecialShabbat === "boolean") {
|
|
32
|
+
base.noSpecialShabbat = options.noSpecialShabbat;
|
|
33
|
+
}
|
|
34
|
+
return base;
|
|
35
|
+
}
|
|
36
|
+
export function getHolidaysOn(date, options = {}) {
|
|
37
|
+
const locale = options.locale ?? "en";
|
|
38
|
+
const events = HebrewCalendar.getHolidaysOnDate(toHDate(date), options.il) ?? [];
|
|
39
|
+
return events.map((event) => toHolidayInfo(event, locale));
|
|
40
|
+
}
|
|
41
|
+
export function getHolidaysForHebrewYear(year, options = {}) {
|
|
42
|
+
const locale = options.locale ?? "en";
|
|
43
|
+
const events = HebrewCalendar.getHolidaysForYearArray(year, Boolean(options.il));
|
|
44
|
+
return events.map((event) => toHolidayInfo(event, locale));
|
|
45
|
+
}
|
|
46
|
+
export function getHolidaysBetween(start, end, options = {}) {
|
|
47
|
+
const locale = options.locale ?? "en";
|
|
48
|
+
const calendarOptions = buildCalendarOptions(options);
|
|
49
|
+
const events = HebrewCalendar.calendar({
|
|
50
|
+
...calendarOptions,
|
|
51
|
+
start: toGregorian(start),
|
|
52
|
+
end: toGregorian(end),
|
|
53
|
+
});
|
|
54
|
+
return events.map((event) => toHolidayInfo(event, locale));
|
|
55
|
+
}
|
|
56
|
+
export function isHoliday(date, options = {}) {
|
|
57
|
+
return getHolidaysOn(date, options).length > 0;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=holidays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holidays.js","sourceRoot":"","sources":["../src/holidays.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
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.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","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"}
|