@wesantal/santali-calendar 1.0.3 → 1.0.4
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/README.md +46 -21
- package/dist/constants/months.d.ts +1 -0
- package/dist/constants/months.d.ts.map +1 -1
- package/dist/constants/months.js +8 -0
- package/dist/constants/months.js.map +1 -1
- package/dist/constants/rules.d.ts +7 -0
- package/dist/constants/rules.d.ts.map +1 -0
- package/dist/constants/rules.js +7 -0
- package/dist/constants/rules.js.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/astronomy.d.ts +6 -4
- package/dist/utils/astronomy.d.ts.map +1 -1
- package/dist/utils/astronomy.js +38 -17
- package/dist/utils/astronomy.js.map +1 -1
- package/dist/utils/calendar.d.ts +2 -16
- package/dist/utils/calendar.d.ts.map +1 -1
- package/dist/utils/calendar.js +46 -54
- package/dist/utils/calendar.js.map +1 -1
- package/dist/utils/leap-year.d.ts +0 -3
- package/dist/utils/leap-year.d.ts.map +1 -1
- package/dist/utils/leap-year.js +1 -3
- package/dist/utils/leap-year.js.map +1 -1
- package/dist/utils/month.d.ts +23 -0
- package/dist/utils/month.d.ts.map +1 -0
- package/dist/utils/month.js +101 -0
- package/dist/utils/month.js.map +1 -0
- package/dist/utils/moon-phase.d.ts +1 -7
- package/dist/utils/moon-phase.d.ts.map +1 -1
- package/dist/utils/moon-phase.js +3 -10
- package/dist/utils/moon-phase.js.map +1 -1
- package/dist/utils/year.utils.d.ts +15 -0
- package/dist/utils/year.utils.d.ts.map +1 -0
- package/dist/utils/year.utils.js +36 -0
- package/dist/utils/year.utils.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -24,16 +24,19 @@ import {
|
|
|
24
24
|
getMonth,
|
|
25
25
|
isLeapYear,
|
|
26
26
|
weekDays,
|
|
27
|
+
santaliWeeks,
|
|
27
28
|
festivals,
|
|
28
29
|
months,
|
|
29
|
-
formatDate,
|
|
30
30
|
formatDateShort,
|
|
31
31
|
toOlChikiNumeral,
|
|
32
|
+
getNextNewMoon,
|
|
33
|
+
getNextFullMoon,
|
|
34
|
+
getMoonPhase,
|
|
32
35
|
} from "@wesantal/santali-calendar";
|
|
33
36
|
|
|
34
37
|
// Get today's Santali date
|
|
35
38
|
const today = getToday();
|
|
36
|
-
// { day: 15, year: 2026, month: "ᱢᱟᱜᱽ",
|
|
39
|
+
// { day: 15, year: 2026, month: { name: "ᱢᱟᱜᱽ", english: "Mag", ... }, monthIndex: 0, ... }
|
|
37
40
|
|
|
38
41
|
// Convert any Gregorian date
|
|
39
42
|
const date = getDate(new Date("2026-06-15"));
|
|
@@ -52,8 +55,12 @@ const magh = getMonth(2026, 0);
|
|
|
52
55
|
toOlChikiNumeral(2026); // "᱒᱐᱒᱖"
|
|
53
56
|
|
|
54
57
|
// Format dates
|
|
55
|
-
formatDate("2026-01-19T00:00:00.000Z"); // "19 January 2026"
|
|
56
58
|
formatDateShort("2026-01-19T00:00:00.000Z"); // "19 Jan 2026"
|
|
59
|
+
|
|
60
|
+
// Moon phase utilities
|
|
61
|
+
const nextNewMoon = getNextNewMoon();
|
|
62
|
+
const nextFullMoon = getNextFullMoon();
|
|
63
|
+
const phase = getMoonPhase(new Date("2026-06-15"));
|
|
57
64
|
```
|
|
58
65
|
|
|
59
66
|
## Calendar Structure
|
|
@@ -63,19 +70,20 @@ formatDateShort("2026-01-19T00:00:00.000Z"); // "19 Jan 2026"
|
|
|
63
70
|
```typescript
|
|
64
71
|
{
|
|
65
72
|
year: 2026,
|
|
66
|
-
startDate: "2026-01-
|
|
67
|
-
endDate: "2027-01-
|
|
73
|
+
startDate: "2026-01-19",
|
|
74
|
+
endDate: "2027-01-07",
|
|
68
75
|
currentMonthIndex: 0,
|
|
69
76
|
months: [
|
|
70
77
|
{
|
|
71
78
|
name: "ᱢᱟᱜᱽ",
|
|
72
79
|
english: "Mag",
|
|
73
|
-
startDate: "2026-01-
|
|
74
|
-
endDate: "2026-02-
|
|
80
|
+
startDate: "2026-01-19",
|
|
81
|
+
endDate: "2026-02-17",
|
|
82
|
+
totalDays: 30,
|
|
75
83
|
days: [
|
|
76
84
|
null, // empty padding cell
|
|
77
|
-
{ day: "
|
|
78
|
-
// ...
|
|
85
|
+
{ day: "᱑", date: "2026-01-19", weekDay: "Sunday", isToday: false, isCurrentMonth: true, isNewMoon: false, isFullMoon: false, santaliWeekDay: "ᱥᱤᱸᱜᱤ" },
|
|
86
|
+
// ... flat array of 42 cells (6 rows × 7 columns)
|
|
79
87
|
]
|
|
80
88
|
},
|
|
81
89
|
// ... 12 or 13 months
|
|
@@ -89,11 +97,11 @@ Each month contains a flat `days` array with 42 cells (6 rows × 7 columns). Eac
|
|
|
89
97
|
|
|
90
98
|
- A `SantaliCalendarDay` object:
|
|
91
99
|
```typescript
|
|
92
|
-
{ day: "
|
|
100
|
+
{ day: "᱑", date: "2026-01-19", weekDay: "Sunday", isToday: false, isCurrentMonth: true, isNewMoon: false, isFullMoon: false, santaliWeekDay: "ᱥᱤᱸᱜᱤ" }
|
|
93
101
|
```
|
|
94
102
|
- `null` for empty padding cells
|
|
95
103
|
|
|
96
|
-
The `day` field is in Ol Chiki script. Use `weekDay`
|
|
104
|
+
The `day` field is in Ol Chiki script. Use `weekDay` for English names or `santaliWeekDay` for Ol Chiki weekday names when rendering a grid layout.
|
|
97
105
|
|
|
98
106
|
## Santali Months
|
|
99
107
|
|
|
@@ -103,14 +111,14 @@ The `day` field is in Ol Chiki script. Use `weekDay` to determine column positio
|
|
|
103
111
|
| 1 | Phagun | ᱯᱷᱟ.ᱜᱩᱱ | 29 |
|
|
104
112
|
| 2 | Chaat | ᱪᱟ.ᱛ | 30 |
|
|
105
113
|
| 3 | Baisak | ᱵᱟ.ᱭᱥᱟ.ᱠ | 29 |
|
|
106
|
-
| 4 | Jhent | ᱡᱷᱮᱸᱴ |
|
|
114
|
+
| 4 | Jhent | ᱡᱷᱮᱸᱴ | 29 |
|
|
107
115
|
| 5 | Asal | ᱟᱥᱟᱲ | 29 |
|
|
108
116
|
| 6 | Saan | ᱥᱟᱱ | 30 |
|
|
109
117
|
| 7 | Bhador | ᱵᱷᱟᱫᱚᱨ | 29 |
|
|
110
118
|
| 8 | Dasain | ᱫᱟᱥᱟᱸᱭ | 30 |
|
|
111
119
|
| 9 | Saharay | ᱥᱚᱦᱨᱟᱭ | 29 |
|
|
112
120
|
| 10 | Aghan | ᱟᱜᱷᱟᱬ | 30 |
|
|
113
|
-
| 11 | Pus | ᱯᱩᱥ |
|
|
121
|
+
| 11 | Pus | ᱯᱩᱥ | 30 |
|
|
114
122
|
|
|
115
123
|
**Normal year:** 354 days (12 months). **Leap year:** 384 days (adds Sarcha, a 30-day intercalary month).
|
|
116
124
|
|
|
@@ -144,20 +152,28 @@ null = empty cell
|
|
|
144
152
|
| `getToday()` | Today's Santali date |
|
|
145
153
|
| `getDate(date)` | Convert a Gregorian date to Santali |
|
|
146
154
|
| `isLeapYear(year)` | Check if year has 13 months |
|
|
147
|
-
| `
|
|
148
|
-
| `formatDate(iso)` | Long format date (e.g. "19 January 2026") |
|
|
155
|
+
| `getYearDays(year)` | Get total days in a year (354 or 384) |
|
|
149
156
|
| `formatDateShort(iso)` | Short format date (e.g. "19 Jan 2026") |
|
|
150
157
|
| `toOlChikiNumeral(n)` | Convert number to Ol Chiki script |
|
|
158
|
+
| `getNextNewMoon(date?)` | Find the next New Moon |
|
|
159
|
+
| `getNextFullMoon(date?)` | Find the next Full Moon |
|
|
160
|
+
| `getMoonPhase(date)` | Get moon phase for a date |
|
|
161
|
+
| `getMoonPhaseName(illumination)` | Get phase name from illumination data |
|
|
162
|
+
| `getMoonPhaseIcon(illumination)` | Get phase icon from illumination data |
|
|
163
|
+
| `getMoonPhaseDescription(illumination)` | Get phase description from illumination data |
|
|
164
|
+
| `getSunriseAndSunset(date, lat, lng)` | Get sunrise/sunset times |
|
|
165
|
+
| `getMoonTimes(date, lat, lng)` | Get moonrise/moonset times |
|
|
166
|
+
| `getLunarPhases(start, end)` | Get all phases between two dates |
|
|
151
167
|
|
|
152
168
|
### Constants
|
|
153
169
|
|
|
154
170
|
| Export | Description |
|
|
155
171
|
|--------|-------------|
|
|
156
172
|
| `months` | Array of 12 base month definitions |
|
|
157
|
-
| `
|
|
158
|
-
| `
|
|
159
|
-
| `
|
|
160
|
-
| `
|
|
173
|
+
| `santaliMonths` | Array of 13 months (includes Sarcha for leap years) |
|
|
174
|
+
| `festivals` | Array of 4 Santali cultural festivals/events |
|
|
175
|
+
| `weekDays` | Array of English weekday names (Sunday-first) |
|
|
176
|
+
| `santaliWeeks` | Array of Ol Chiki weekday objects with `name` and `english` |
|
|
161
177
|
|
|
162
178
|
## Festivals
|
|
163
179
|
|
|
@@ -165,11 +181,11 @@ null = empty cell
|
|
|
165
181
|
import { festivals } from "@wesantal/santali-calendar";
|
|
166
182
|
|
|
167
183
|
festivals.forEach((f) => {
|
|
168
|
-
console.log(`${f.name}: ${f.
|
|
184
|
+
console.log(`${f.name}: ${f.startedAt}`);
|
|
169
185
|
});
|
|
170
186
|
```
|
|
171
187
|
|
|
172
|
-
Each festival includes `id`, `name`, `date
|
|
188
|
+
Each festival includes `id`, `name`, `startedAt` (founding date), `description`, and `type` (`"cultural"` or `"community"`).
|
|
173
189
|
|
|
174
190
|
## TypeScript
|
|
175
191
|
|
|
@@ -177,7 +193,10 @@ Full type support:
|
|
|
177
193
|
|
|
178
194
|
```typescript
|
|
179
195
|
import type {
|
|
196
|
+
DateTime,
|
|
180
197
|
WeekDay,
|
|
198
|
+
SantaliWeekDay,
|
|
199
|
+
SantaliWeek,
|
|
181
200
|
SantaliMonth,
|
|
182
201
|
SantaliMonthInfo,
|
|
183
202
|
SantaliCalendarYear,
|
|
@@ -187,6 +206,12 @@ import type {
|
|
|
187
206
|
SantaliCalendarMonth,
|
|
188
207
|
SantaliFestival,
|
|
189
208
|
TodaySantaliDate,
|
|
209
|
+
MoonPhase,
|
|
210
|
+
MoonPhaseIcon,
|
|
211
|
+
MoonPhaseName,
|
|
212
|
+
LunarQuarterType,
|
|
213
|
+
LunarQuarter,
|
|
214
|
+
LunarEvents,
|
|
190
215
|
} from "@wesantal/santali-calendar";
|
|
191
216
|
```
|
|
192
217
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"months.d.ts","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,MAAM,EAAE,gBAAgB,EA6DpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"months.d.ts","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,MAAM,EAAE,gBAAgB,EA6DpC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,gBAAgB,EAO3C,CAAC"}
|
package/dist/constants/months.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"months.js","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAuB;IACxC;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;KACf;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"months.js","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAuB;IACxC;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAuB;IAC/C,GAAG,MAAM;IACT;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,QAAQ;KAClB;CACF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const IST_TIME_ZONE = "Asia/Kolkata";
|
|
2
|
+
export declare const MONTH_START_CUTOFF_HOUR = 17;
|
|
3
|
+
export declare const MONTH_START_CUTOFF_MINUTE = 0;
|
|
4
|
+
export declare const METONIC_CYCLE_START = 2026;
|
|
5
|
+
export declare const METONIC_LEAP_POS: Set<number>;
|
|
6
|
+
export declare const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
|
|
7
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/constants/rules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAC5C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,gBAAgB,aAAoC,CAAC;AAClE,eAAO,MAAM,gBAAgB,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const IST_TIME_ZONE = "Asia/Kolkata";
|
|
2
|
+
export const MONTH_START_CUTOFF_HOUR = 17;
|
|
3
|
+
export const MONTH_START_CUTOFF_MINUTE = 0;
|
|
4
|
+
export const METONIC_CYCLE_START = 2026;
|
|
5
|
+
export const METONIC_LEAP_POS = new Set([1, 4, 7, 9, 12, 15, 18]);
|
|
6
|
+
export const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
|
|
7
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/constants/rules.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export interface SantaliCalendarDay {
|
|
|
42
42
|
date: string;
|
|
43
43
|
isToday: boolean;
|
|
44
44
|
weekDay: WeekDay;
|
|
45
|
+
isNewMoon: boolean;
|
|
46
|
+
isFullMoon: boolean;
|
|
45
47
|
isCurrentMonth: boolean;
|
|
46
48
|
santaliWeekDay: SantaliWeekDay;
|
|
47
49
|
}
|
|
@@ -53,8 +55,6 @@ export interface SantaliCalendarMonth {
|
|
|
53
55
|
totalDays: number;
|
|
54
56
|
startDate: string;
|
|
55
57
|
description?: string;
|
|
56
|
-
newMoonPhase: MoonPhase;
|
|
57
|
-
fullMoonPhase: MoonPhase;
|
|
58
58
|
days: SantaliCalendarDayCell[];
|
|
59
59
|
}
|
|
60
60
|
export interface SantaliCalendarYear {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,WAAW,GACX,UAAU,GACV,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,cAAc,GACxB,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG,IAAI,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { DateTime,
|
|
2
|
-
export declare function
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { DateTime, LunarQuarter } from "../types/index.js";
|
|
2
|
+
export declare function getNextNewMoon(date?: DateTime): LunarQuarter;
|
|
3
|
+
/**
|
|
4
|
+
* Find the next Full Moon (Purnima).
|
|
5
|
+
*/
|
|
6
|
+
export declare function getNextFullMoon(date?: DateTime): LunarQuarter;
|
|
5
7
|
//# sourceMappingURL=astronomy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astronomy.d.ts","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"astronomy.d.ts","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAU3D,wBAAgB,cAAc,CAAC,IAAI,GAAE,QAAqB,GAAG,YAAY,CAiBxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,QAAqB,GAAG,YAAY,CAezE"}
|
package/dist/utils/astronomy.js
CHANGED
|
@@ -1,23 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (currentMoonPhase.name === name) {
|
|
10
|
-
moonPhase = currentMoonPhase;
|
|
11
|
-
break;
|
|
12
|
-
}
|
|
13
|
-
searchedDays++;
|
|
14
|
-
}
|
|
15
|
-
return moonPhase;
|
|
1
|
+
import { SearchMoonPhase } from "astronomy-engine";
|
|
2
|
+
import { toDate } from "date-fns";
|
|
3
|
+
/**
|
|
4
|
+
* Converts Astronomy Engine AstroTime
|
|
5
|
+
* into a JavaScript Date.
|
|
6
|
+
*/
|
|
7
|
+
function astroTimeToDate(time) {
|
|
8
|
+
return time.date;
|
|
16
9
|
}
|
|
17
10
|
export function getNextNewMoon(date = new Date()) {
|
|
18
|
-
|
|
11
|
+
const time = SearchMoonPhase(0, toDate(date), 40);
|
|
12
|
+
if (!time) {
|
|
13
|
+
throw new Error("Unable to find the next New Moon.");
|
|
14
|
+
}
|
|
15
|
+
const eventDate = astroTimeToDate(time);
|
|
16
|
+
return {
|
|
17
|
+
quarter: 0,
|
|
18
|
+
date: eventDate,
|
|
19
|
+
type: "NEW_MOON",
|
|
20
|
+
dateTime: eventDate.toISOString(),
|
|
21
|
+
dateString: eventDate.toISOString().slice(0, 10),
|
|
22
|
+
name: "New Moon",
|
|
23
|
+
icon: "🌑",
|
|
24
|
+
};
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Find the next Full Moon (Purnima).
|
|
28
|
+
*/
|
|
20
29
|
export function getNextFullMoon(date = new Date()) {
|
|
21
|
-
|
|
30
|
+
const time = SearchMoonPhase(180, toDate(date), 40);
|
|
31
|
+
if (!time)
|
|
32
|
+
throw new Error("Unable to find the next Full Moon.");
|
|
33
|
+
const eventDate = astroTimeToDate(time);
|
|
34
|
+
return {
|
|
35
|
+
quarter: 2,
|
|
36
|
+
date: eventDate,
|
|
37
|
+
type: "FULL_MOON",
|
|
38
|
+
dateTime: eventDate.toISOString(),
|
|
39
|
+
dateString: eventDate.toISOString().slice(0, 10),
|
|
40
|
+
name: "Full Moon",
|
|
41
|
+
icon: "🌕",
|
|
42
|
+
};
|
|
22
43
|
}
|
|
23
44
|
//# sourceMappingURL=astronomy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astronomy.js","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"astronomy.js","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAoB;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAiB,IAAI,IAAI,EAAE;IACxD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;QACjC,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAiB,IAAI,IAAI,EAAE;IACzD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;QACjC,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC"}
|
package/dist/utils/calendar.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SantaliCalendarMonth, SantaliCalendarYear, SantaliMonth, TodaySantaliDate } from "../types/index.js";
|
|
2
|
-
export declare function formatToDateString(date:
|
|
1
|
+
import { DateTime, SantaliCalendarMonth, SantaliCalendarYear, SantaliMonth, TodaySantaliDate } from "../types/index.js";
|
|
2
|
+
export declare function formatToDateString(date: DateTime): string;
|
|
3
3
|
export declare function buildNormalMonth(month: SantaliMonth, previousMonth?: SantaliMonth, nextMonth?: SantaliMonth): SantaliCalendarMonth;
|
|
4
4
|
export declare function formatDateShort(iso: string): string;
|
|
5
5
|
/**
|
|
@@ -29,20 +29,6 @@ export declare function getBaseMonthDays(): number;
|
|
|
29
29
|
* Throws if the base months don't contain exactly 354 days.
|
|
30
30
|
*/
|
|
31
31
|
export declare function validateMonths(): void;
|
|
32
|
-
/**
|
|
33
|
-
* Calculate the beginning of any Santali year from the known anchor.
|
|
34
|
-
*
|
|
35
|
-
* 2026 = YEAR_ANCHOR_DATE
|
|
36
|
-
*
|
|
37
|
-
* For future years:
|
|
38
|
-
* add each previous year's actual length.
|
|
39
|
-
*
|
|
40
|
-
* For previous years:
|
|
41
|
-
* subtract each previous year's actual length.
|
|
42
|
-
*
|
|
43
|
-
* This is important because a leap year is not necessarily 365/366 days.
|
|
44
|
-
*/
|
|
45
|
-
export declare function buildYearStart(year: number, anchorYear?: number, anchorDate?: string): string;
|
|
46
32
|
/**
|
|
47
33
|
* Build all months for a particular Santali year.
|
|
48
34
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,QAAQ,EAER,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EAEZ,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAiB3B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,aAAa,CAAC,EAAE,YAAY,EAC5B,SAAS,CAAC,EAAE,YAAY,GACvB,oBAAoB,CAuFtB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GACpB,YAAY,EAAE,CAmChB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAuC7D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,oBAAoB,CAetB;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,gBAAgB,CAkE7D;AAMD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,gBAAgB,CAE3C"}
|
package/dist/utils/calendar.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { addDays, differenceInDays, formatDate, getDay, isToday, toDate, } from "date-fns";
|
|
2
2
|
import { months } from "../constants/months.js";
|
|
3
3
|
import { santaliWeeks, weekDays } from "../constants/week-days.js";
|
|
4
|
-
import {
|
|
5
|
-
import { isLeapYear
|
|
4
|
+
import { METONIC_CYCLE_START, YEAR_ANCHOR_DATE } from "../constants/rules.js";
|
|
5
|
+
import { isLeapYear } from "./leap-year.js";
|
|
6
|
+
import { getMonths } from "./month.js";
|
|
7
|
+
import { getMoonPhase } from "./moon-phase.js";
|
|
6
8
|
import { toOlChikiNumeral } from "./numeral.js";
|
|
9
|
+
import { buildYearStart } from "./year.utils.js";
|
|
7
10
|
function getWeekDay(date) {
|
|
8
11
|
return weekDays[date.getDay()];
|
|
9
12
|
}
|
|
@@ -11,18 +14,7 @@ function getSantaliWeekDay(date) {
|
|
|
11
14
|
return santaliWeeks[date.getDay()]?.name;
|
|
12
15
|
}
|
|
13
16
|
export function formatToDateString(date) {
|
|
14
|
-
return formatDate(date, "yyyy-MM-dd");
|
|
15
|
-
}
|
|
16
|
-
function createCalendarDay(day, date, isCurrentMonth) {
|
|
17
|
-
return {
|
|
18
|
-
day: toOlChikiNumeral(day),
|
|
19
|
-
date: formatToDateString(date),
|
|
20
|
-
isCurrentMonth,
|
|
21
|
-
isToday: isToday(date),
|
|
22
|
-
weekDay: getWeekDay(date),
|
|
23
|
-
// moonPhase: getMoonPhase(date),
|
|
24
|
-
santaliWeekDay: getSantaliWeekDay(date),
|
|
25
|
-
};
|
|
17
|
+
return formatDate(toDate(date), "yyyy-MM-dd");
|
|
26
18
|
}
|
|
27
19
|
export function buildNormalMonth(month, previousMonth, nextMonth) {
|
|
28
20
|
const cells = [];
|
|
@@ -36,7 +28,19 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
|
|
|
36
28
|
const firstPreviousDay = previousMonth.days - startDow + 1;
|
|
37
29
|
for (let day = firstPreviousDay; day <= previousMonth.days; day++) {
|
|
38
30
|
const currentDate = addDays(previousStart, day - 1);
|
|
39
|
-
|
|
31
|
+
const dateString = formatToDateString(currentDate);
|
|
32
|
+
const isNewMoon = getMoonPhase(currentDate).name === "New Moon";
|
|
33
|
+
const isFullMoon = getMoonPhase(currentDate).name === "Full Moon";
|
|
34
|
+
cells.push({
|
|
35
|
+
date: dateString,
|
|
36
|
+
day: toOlChikiNumeral(day),
|
|
37
|
+
isCurrentMonth: false,
|
|
38
|
+
isFullMoon,
|
|
39
|
+
isNewMoon,
|
|
40
|
+
isToday: false,
|
|
41
|
+
weekDay: getWeekDay(currentDate),
|
|
42
|
+
santaliWeekDay: getSantaliWeekDay(currentDate),
|
|
43
|
+
});
|
|
40
44
|
}
|
|
41
45
|
}
|
|
42
46
|
else {
|
|
@@ -48,7 +52,19 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
|
|
|
48
52
|
* Current month.
|
|
49
53
|
*/
|
|
50
54
|
for (let day = 1; day <= month.days; day++) {
|
|
51
|
-
|
|
55
|
+
const currentDate = addDays(toDate(month.startDate), day - 1);
|
|
56
|
+
const dateString = formatToDateString(currentDate);
|
|
57
|
+
const isFullMoon = getMoonPhase(currentDate).name === "Full Moon";
|
|
58
|
+
cells.push({
|
|
59
|
+
date: dateString,
|
|
60
|
+
isFullMoon,
|
|
61
|
+
isNewMoon: day === 1,
|
|
62
|
+
isCurrentMonth: true,
|
|
63
|
+
day: toOlChikiNumeral(day),
|
|
64
|
+
isToday: isToday(currentDate),
|
|
65
|
+
weekDay: getWeekDay(currentDate),
|
|
66
|
+
santaliWeekDay: getSantaliWeekDay(currentDate),
|
|
67
|
+
});
|
|
52
68
|
}
|
|
53
69
|
/*
|
|
54
70
|
* Gregorian calendars normally complete
|
|
@@ -57,9 +73,20 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
|
|
|
57
73
|
const remainder = cells.length % 7;
|
|
58
74
|
if (remainder !== 0 && nextMonth) {
|
|
59
75
|
const required = 7 - remainder;
|
|
60
|
-
const nextStart = toDate(nextMonth.startDate);
|
|
61
76
|
for (let day = 1; day <= required && day <= nextMonth.days; day++) {
|
|
62
|
-
|
|
77
|
+
const currentDate = addDays(toDate(month.endDate), day + 1);
|
|
78
|
+
const dateString = formatToDateString(currentDate);
|
|
79
|
+
const isFullMoon = getMoonPhase(currentDate).name === "Full Moon";
|
|
80
|
+
cells.push({
|
|
81
|
+
date: dateString,
|
|
82
|
+
day: toOlChikiNumeral(day),
|
|
83
|
+
isToday: false,
|
|
84
|
+
isCurrentMonth: false,
|
|
85
|
+
isFullMoon,
|
|
86
|
+
isNewMoon: day === 1,
|
|
87
|
+
weekDay: getWeekDay(currentDate),
|
|
88
|
+
santaliWeekDay: getSantaliWeekDay(currentDate),
|
|
89
|
+
});
|
|
63
90
|
}
|
|
64
91
|
}
|
|
65
92
|
while (cells.length % 7 !== 0) {
|
|
@@ -69,8 +96,6 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
|
|
|
69
96
|
...month,
|
|
70
97
|
days: cells,
|
|
71
98
|
totalDays: month.days,
|
|
72
|
-
newMoonPhase: getNextNewMoon(month.startDate),
|
|
73
|
-
fullMoonPhase: getNextFullMoon(month.startDate),
|
|
74
99
|
};
|
|
75
100
|
}
|
|
76
101
|
export function formatDateShort(iso) {
|
|
@@ -120,39 +145,6 @@ export function validateMonths() {
|
|
|
120
145
|
}
|
|
121
146
|
}
|
|
122
147
|
/* -------------------------------------------------------------------------- */
|
|
123
|
-
/* Year start */
|
|
124
|
-
/* -------------------------------------------------------------------------- */
|
|
125
|
-
/**
|
|
126
|
-
* Calculate the beginning of any Santali year from the known anchor.
|
|
127
|
-
*
|
|
128
|
-
* 2026 = YEAR_ANCHOR_DATE
|
|
129
|
-
*
|
|
130
|
-
* For future years:
|
|
131
|
-
* add each previous year's actual length.
|
|
132
|
-
*
|
|
133
|
-
* For previous years:
|
|
134
|
-
* subtract each previous year's actual length.
|
|
135
|
-
*
|
|
136
|
-
* This is important because a leap year is not necessarily 365/366 days.
|
|
137
|
-
*/
|
|
138
|
-
export function buildYearStart(year, anchorYear = 2026, anchorDate = YEAR_ANCHOR_DATE) {
|
|
139
|
-
let startDate = toDate(anchorDate);
|
|
140
|
-
if (year === anchorYear) {
|
|
141
|
-
return startDate.toISOString();
|
|
142
|
-
}
|
|
143
|
-
if (year > anchorYear) {
|
|
144
|
-
for (let currentYear = anchorYear; currentYear < year; currentYear++) {
|
|
145
|
-
startDate = addDays(startDate, getYearDays(currentYear));
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
for (let currentYear = anchorYear - 1; currentYear >= year; currentYear--) {
|
|
150
|
-
startDate = addDays(startDate, -getYearDays(currentYear));
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return startDate.toISOString();
|
|
154
|
-
}
|
|
155
|
-
/* -------------------------------------------------------------------------- */
|
|
156
148
|
/* Build months */
|
|
157
149
|
/* -------------------------------------------------------------------------- */
|
|
158
150
|
/**
|
|
@@ -207,7 +199,7 @@ export function getCalendar(year) {
|
|
|
207
199
|
throw new TypeError(`Santali year must be an integer: ${year}`);
|
|
208
200
|
}
|
|
209
201
|
const startDate = buildYearStart(year);
|
|
210
|
-
const yearMonths =
|
|
202
|
+
const yearMonths = getMonths(year);
|
|
211
203
|
const totalDays = yearMonths.reduce((total, month) => total + month.days, 0);
|
|
212
204
|
const expectedDays = getYearDays(year);
|
|
213
205
|
if (totalDays !== expectedDays) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,OAAO,EACP,MAAM,GACP,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
export declare const METONIC_CYCLE_START = 2026;
|
|
2
|
-
export declare const METONIC_LEAP_POS: Set<number>;
|
|
3
|
-
export declare const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
|
|
4
1
|
export declare function isLeapYear(y: number): boolean;
|
|
5
2
|
//# sourceMappingURL=leap-year.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leap-year.d.ts","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"leap-year.d.ts","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI7C"}
|
package/dist/utils/leap-year.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export const METONIC_LEAP_POS = new Set([1, 4, 7, 9, 12, 15, 18]);
|
|
3
|
-
export const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
|
|
1
|
+
import { METONIC_CYCLE_START, METONIC_LEAP_POS } from "../constants/rules.js";
|
|
4
2
|
export function isLeapYear(y) {
|
|
5
3
|
// Normalize year to a 1-19 position
|
|
6
4
|
const pos = ((((y - METONIC_CYCLE_START) % 19) + 19) % 19) + 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leap-year.js","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"leap-year.js","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,oCAAoC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FlexibleDateTime } from "astronomy-engine";
|
|
2
|
+
import { SantaliMonth } from "../types/index.js";
|
|
3
|
+
export interface SantaliMonthStart {
|
|
4
|
+
newMoon: Date;
|
|
5
|
+
monthStartDate: Date;
|
|
6
|
+
istDate: {
|
|
7
|
+
year: number;
|
|
8
|
+
month: number;
|
|
9
|
+
day: number;
|
|
10
|
+
};
|
|
11
|
+
newMoonTimeIST: {
|
|
12
|
+
hour: number;
|
|
13
|
+
minute: number;
|
|
14
|
+
second: number;
|
|
15
|
+
};
|
|
16
|
+
cutoffTime: string;
|
|
17
|
+
startsSameDay: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function calculateSantaliMonthStart(newMoonDate: Date): SantaliMonthStart;
|
|
20
|
+
export declare function getNextSantaliMonth(date: FlexibleDateTime): SantaliMonthStart;
|
|
21
|
+
export declare function getPreviousSantaliMonth(date?: FlexibleDateTime): SantaliMonthStart;
|
|
22
|
+
export declare function getMonths(year: number): SantaliMonth[];
|
|
23
|
+
//# sourceMappingURL=month.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month.d.ts","sourceRoot":"","sources":["../../src/utils/month.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AAcrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA+CjD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IAEd,cAAc,EAAE,IAAI,CAAC;IAErB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IAEF,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,EAAE,OAAO,CAAC;CACxB;AACD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,IAAI,GAChB,iBAAiB,CAoCnB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAQ7E;AAED,wBAAgB,uBAAuB,CACrC,IAAI,GAAE,gBAA6B,GAClC,iBAAiB,CAQnB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,kBA2BrC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { SearchMoonPhase } from "astronomy-engine";
|
|
2
|
+
import { addDays, differenceInDays, formatDate, subDays, toDate, } from "date-fns";
|
|
3
|
+
import { santaliMonths } from "../constants/months.js";
|
|
4
|
+
import { IST_TIME_ZONE, MONTH_START_CUTOFF_HOUR, MONTH_START_CUTOFF_MINUTE, } from "../constants/rules.js";
|
|
5
|
+
import { isLeapYear } from "./leap-year.js";
|
|
6
|
+
import { buildYearStart } from "./year.utils.js";
|
|
7
|
+
function getISTDateParts(date) {
|
|
8
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
9
|
+
timeZone: IST_TIME_ZONE,
|
|
10
|
+
year: "numeric",
|
|
11
|
+
month: "numeric",
|
|
12
|
+
day: "numeric",
|
|
13
|
+
hour: "numeric",
|
|
14
|
+
minute: "numeric",
|
|
15
|
+
second: "numeric",
|
|
16
|
+
hourCycle: "h23",
|
|
17
|
+
});
|
|
18
|
+
const parts = formatter.formatToParts(date);
|
|
19
|
+
const getValue = (type) => {
|
|
20
|
+
const value = parts.find((part) => part.type === type)?.value;
|
|
21
|
+
if (!value) {
|
|
22
|
+
throw new Error(`Unable to determine IST ${type}.`);
|
|
23
|
+
}
|
|
24
|
+
return Number(value);
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
year: getValue("year"),
|
|
28
|
+
month: getValue("month"),
|
|
29
|
+
day: getValue("day"),
|
|
30
|
+
hour: getValue("hour"),
|
|
31
|
+
minute: getValue("minute"),
|
|
32
|
+
second: getValue("second"),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function calculateSantaliMonthStart(newMoonDate) {
|
|
36
|
+
const ist = getISTDateParts(newMoonDate);
|
|
37
|
+
const minutesOfDay = ist.hour * 60 + ist.minute;
|
|
38
|
+
const cutoffMinutes = MONTH_START_CUTOFF_HOUR * 60 + MONTH_START_CUTOFF_MINUTE;
|
|
39
|
+
const startsSameDay = minutesOfDay < cutoffMinutes;
|
|
40
|
+
const monthStartDate = new Date(Date.UTC(ist.year, ist.month - 1, ist.day, 12, 0, 0));
|
|
41
|
+
if (!startsSameDay) {
|
|
42
|
+
monthStartDate.setUTCDate(monthStartDate.getUTCDate() + 1);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
newMoon: newMoonDate,
|
|
46
|
+
monthStartDate,
|
|
47
|
+
istDate: {
|
|
48
|
+
year: ist.year,
|
|
49
|
+
month: ist.month,
|
|
50
|
+
day: ist.day,
|
|
51
|
+
},
|
|
52
|
+
newMoonTimeIST: {
|
|
53
|
+
hour: ist.hour,
|
|
54
|
+
minute: ist.minute,
|
|
55
|
+
second: ist.second,
|
|
56
|
+
},
|
|
57
|
+
cutoffTime: "17:00 IST",
|
|
58
|
+
startsSameDay,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function getNextSantaliMonth(date) {
|
|
62
|
+
const newMoon = SearchMoonPhase(0, date, 40);
|
|
63
|
+
if (!newMoon) {
|
|
64
|
+
throw new Error("Unable to find the next New Moon.");
|
|
65
|
+
}
|
|
66
|
+
return calculateSantaliMonthStart(newMoon.date);
|
|
67
|
+
}
|
|
68
|
+
export function getPreviousSantaliMonth(date = new Date()) {
|
|
69
|
+
const newMoon = SearchMoonPhase(0, date, -40);
|
|
70
|
+
if (!newMoon) {
|
|
71
|
+
throw new Error("Unable to find the previous New Moon.");
|
|
72
|
+
}
|
|
73
|
+
return calculateSantaliMonthStart(newMoon.date);
|
|
74
|
+
}
|
|
75
|
+
export function getMonths(year) {
|
|
76
|
+
const months = [];
|
|
77
|
+
const totalYears = isLeapYear(year) ? 13 : 12;
|
|
78
|
+
const startYearDate = buildYearStart(year);
|
|
79
|
+
const minDaysInMonth = 28;
|
|
80
|
+
let startDate = toDate(startYearDate);
|
|
81
|
+
for (let m = 0; totalYears > m; m++) {
|
|
82
|
+
const endDate = addDays(startDate, minDaysInMonth);
|
|
83
|
+
const nextMonth = getNextSantaliMonth(endDate);
|
|
84
|
+
const days = differenceInDays(nextMonth.monthStartDate, startDate);
|
|
85
|
+
const finalEndDate = addDays(startDate, days);
|
|
86
|
+
const month = santaliMonths[m];
|
|
87
|
+
if (month) {
|
|
88
|
+
const monthEndDate = formatDate(subDays(finalEndDate, 1), "yyyy-MM-dd");
|
|
89
|
+
months.push({
|
|
90
|
+
days,
|
|
91
|
+
name: month.name,
|
|
92
|
+
english: month.english,
|
|
93
|
+
endDate: monthEndDate,
|
|
94
|
+
startDate: startDate.toISOString().slice(0, 10),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
startDate = finalEndDate;
|
|
98
|
+
}
|
|
99
|
+
return months;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=month.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month.js","sourceRoot":"","sources":["../../src/utils/month.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import * as SunCalc from "suncalc";
|
|
2
2
|
import { DateTime, MoonPhase, MoonPhaseIcon, MoonPhaseName } from "../types/index.js";
|
|
3
|
-
/**
|
|
4
|
-
* Get the moon phase index for a given phase
|
|
5
|
-
* @param phase The moon phase
|
|
6
|
-
* @returns The moon phase index
|
|
7
|
-
*/
|
|
8
|
-
export declare function getMoonPhaseIndex(phase: number): number;
|
|
9
3
|
/**
|
|
10
4
|
* Get the moon phase name for a given illumination
|
|
11
5
|
* @param illumination The moon illumination
|
|
@@ -29,7 +23,7 @@ export declare function getMoonPhaseDescription(illumination: SunCalc.MoonIllumi
|
|
|
29
23
|
* @param date The date to get the moon phase for
|
|
30
24
|
* @returns The moon phase
|
|
31
25
|
*/
|
|
32
|
-
export declare function getMoonPhase(date:
|
|
26
|
+
export declare function getMoonPhase(date: DateTime): MoonPhase;
|
|
33
27
|
/**
|
|
34
28
|
* Get sunrise and sunset times for a given date and location
|
|
35
29
|
* @param date The date to get sunrise and sunset times for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moon-phase.d.ts","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"moon-phase.d.ts","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,aAAa,CAUf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,aAAa,CAUf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,MAAM,CAUR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAiBtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,CAElB;AAED;;;;;;GAMG;AAEH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAEnB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,0BASpE"}
|
package/dist/utils/moon-phase.js
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import { addDays, differenceInDays } from "date-fns";
|
|
1
|
+
import { addDays, differenceInDays, toDate } from "date-fns";
|
|
2
2
|
import * as SunCalc from "suncalc";
|
|
3
3
|
import { formatToDateString } from "./calendar.js";
|
|
4
4
|
import { getISTCutoff } from "./moon-date.js";
|
|
5
|
-
/**
|
|
6
|
-
* Get the moon phase index for a given phase
|
|
7
|
-
* @param phase The moon phase
|
|
8
|
-
* @returns The moon phase index
|
|
9
|
-
*/
|
|
10
|
-
export function getMoonPhaseIndex(phase) {
|
|
11
|
-
return Math.round(phase * 8) % 8;
|
|
12
|
-
}
|
|
13
5
|
/**
|
|
14
6
|
* Get the moon phase name for a given illumination
|
|
15
7
|
* @param illumination The moon illumination
|
|
@@ -85,7 +77,8 @@ export function getMoonPhaseDescription(illumination) {
|
|
|
85
77
|
* @returns The moon phase
|
|
86
78
|
*/
|
|
87
79
|
export function getMoonPhase(date) {
|
|
88
|
-
const
|
|
80
|
+
const currentDate = toDate(date);
|
|
81
|
+
const cutoffDate = getISTCutoff(currentDate.getUTCFullYear(), currentDate.getUTCMonth(), currentDate.getUTCDate());
|
|
89
82
|
const illumination = SunCalc.getMoonIllumination(cutoffDate);
|
|
90
83
|
return {
|
|
91
84
|
date: formatToDateString(cutoffDate),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moon-phase.js","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"moon-phase.js","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate the beginning of any Santali year from the known anchor.
|
|
3
|
+
*
|
|
4
|
+
* 2026 = YEAR_ANCHOR_DATE
|
|
5
|
+
*
|
|
6
|
+
* For future years:
|
|
7
|
+
* add each previous year's actual length.
|
|
8
|
+
*
|
|
9
|
+
* For previous years:
|
|
10
|
+
* subtract each previous year's actual length.
|
|
11
|
+
*
|
|
12
|
+
* This is important because a leap year is not necessarily 365/366 days.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildYearStart(year: number, anchorYear?: number): Date;
|
|
15
|
+
//# sourceMappingURL=year.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"year.utils.d.ts","sourceRoot":"","sources":["../../src/utils/year.utils.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAO,GAAG,IAAI,CAgBpE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* -------------------------------------------------------------------------- */
|
|
2
|
+
/* Year start */
|
|
3
|
+
/* -------------------------------------------------------------------------- */
|
|
4
|
+
import { addDays, toDate } from "date-fns";
|
|
5
|
+
import { YEAR_ANCHOR_DATE } from "../constants/rules.js";
|
|
6
|
+
import { getYearDays } from "./calendar.js";
|
|
7
|
+
/**
|
|
8
|
+
* Calculate the beginning of any Santali year from the known anchor.
|
|
9
|
+
*
|
|
10
|
+
* 2026 = YEAR_ANCHOR_DATE
|
|
11
|
+
*
|
|
12
|
+
* For future years:
|
|
13
|
+
* add each previous year's actual length.
|
|
14
|
+
*
|
|
15
|
+
* For previous years:
|
|
16
|
+
* subtract each previous year's actual length.
|
|
17
|
+
*
|
|
18
|
+
* This is important because a leap year is not necessarily 365/366 days.
|
|
19
|
+
*/
|
|
20
|
+
export function buildYearStart(year, anchorYear = 2026) {
|
|
21
|
+
let startDate = toDate(YEAR_ANCHOR_DATE);
|
|
22
|
+
if (year === anchorYear)
|
|
23
|
+
return startDate;
|
|
24
|
+
if (year > anchorYear) {
|
|
25
|
+
for (let currentYear = anchorYear; currentYear < year; currentYear++) {
|
|
26
|
+
startDate = addDays(startDate, getYearDays(currentYear));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
for (let currentYear = anchorYear - 1; currentYear >= year; currentYear--) {
|
|
31
|
+
startDate = addDays(startDate, -getYearDays(currentYear));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return startDate;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=year.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"year.utils.js","sourceRoot":"","sources":["../../src/utils/year.utils.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAEhF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,UAAU,GAAG,IAAI;IAC5D,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEzC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAE1C,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;QACtB,KAAK,IAAI,WAAW,GAAG,UAAU,EAAE,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;YACrE,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,WAAW,GAAG,UAAU,GAAG,CAAC,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;YAC1E,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wesantal/santali-calendar",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "A framework-independent Santali Calendar data and utility package for JavaScript and TypeScript applications.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"vitest": "^3.2.4"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
+
"astronomy-engine": "^2.1.19",
|
|
56
57
|
"date-fns": "^4.4.0",
|
|
57
58
|
"suncalc": "^2.0.2"
|
|
58
59
|
}
|