panchang-ts 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/dist/index.cjs +206 -39
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +206 -39
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ console.log(result.rahuKalam); // { start: Date, end: Date }
|
|
|
72
72
|
|
|
73
73
|
// Choghadiya — 8 daytime slots
|
|
74
74
|
result.choghadiya.day.forEach(slot => {
|
|
75
|
-
console.log(slot.name, slot.
|
|
75
|
+
console.log(slot.name, slot.qualityName); // "Amrit", "Auspicious"
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
// Panchaka
|
|
@@ -95,7 +95,7 @@ result.festivals.forEach(f => {
|
|
|
95
95
|
|
|
96
96
|
// Gowri Panchangam — 8 daytime slots
|
|
97
97
|
result.gowriPanchangam.day.forEach(slot => {
|
|
98
|
-
console.log(slot.name, slot.
|
|
98
|
+
console.log(slot.name, slot.qualityName); // "Amrit", "Auspicious"
|
|
99
99
|
});
|
|
100
100
|
|
|
101
101
|
|
|
@@ -239,7 +239,7 @@ console.log(result.panchaka); // false
|
|
|
239
239
|
|--------|------|---------|-------------|
|
|
240
240
|
| `timezone` | `number \| string` | **required** | UTC offset in minutes (330 for IST). Use a number on Hermes — IANA strings require `Intl`. |
|
|
241
241
|
| `ayanamsa` | `'lahiri' \| 'raman' \| 'krishnamurti'` | `'lahiri'` | Ayanamsa system |
|
|
242
|
-
| `language` | `'en' \| 'sa' \| 'hi'` | `'en'` | Language for element names. `'
|
|
242
|
+
| `language` | `'en' \| 'sa' \| 'hi'` | `'en'` | Language for all element names (tithi, paksha, masa, etc.). `'sa'` = classical Sanskrit Devanagari, `'hi'` = modern Hindi Devanagari. |
|
|
243
243
|
| `computeEndTimes` | `boolean` | `true` | Set `false` for ~5× faster, names-only output |
|
|
244
244
|
| `precision` | `'standard' \| 'high'` | `'standard'` | Binary-search iterations (15 vs 25). High precision is rarely needed. |
|
|
245
245
|
|
|
@@ -293,6 +293,7 @@ const brahma = computeBrahmaMuhurta(sunrise, sunset); // { start, end }
|
|
|
293
293
|
// Gowri Panchangam (varaIndex: 0=Sun … 6=Sat)
|
|
294
294
|
const gowri = computeGowriPanchangam(sunrise, sunset, nextSunrise, varaIndex,
|
|
295
295
|
(i) => ['Udyog','Amrit','Roga','Laabh','Shubh','Kaal','Dhan','Chal'][i]!,
|
|
296
|
+
(q) => ({ auspicious: 'Auspicious', inauspicious: 'Inauspicious', neutral: 'Neutral' })[q],
|
|
296
297
|
);
|
|
297
298
|
// gowri.day → 8 GowriSlot (sunrise → sunset)
|
|
298
299
|
// gowri.night → 8 GowriSlot (sunset → next sunrise)
|
|
@@ -331,7 +332,7 @@ interface TimePeriod {
|
|
|
331
332
|
interface TithiInfo {
|
|
332
333
|
index: number; // 0–29
|
|
333
334
|
name: string; // e.g. "Shukla Pratipada"
|
|
334
|
-
paksha:
|
|
335
|
+
paksha: string; // "Shukla"/"Krishna" (en), "शुक्ल"/"कृष्ण" (sa/hi) — localized
|
|
335
336
|
number: number; // 1–15 within the paksha
|
|
336
337
|
completionPercentage: number;
|
|
337
338
|
endTime: Date | null;
|
|
@@ -406,8 +407,9 @@ type ChoghadiyaQuality = 'auspicious' | 'inauspicious' | 'neutral';
|
|
|
406
407
|
|
|
407
408
|
interface ChoghadiyaSlot extends TimePeriod {
|
|
408
409
|
index: number;
|
|
409
|
-
name: string;
|
|
410
|
-
quality: ChoghadiyaQuality;
|
|
410
|
+
name: string; // e.g. "Amrit", "Kaal", "Shubh" (localized)
|
|
411
|
+
quality: ChoghadiyaQuality; // programmatic key: 'auspicious' | 'inauspicious' | 'neutral'
|
|
412
|
+
qualityName: string; // localized display name (e.g. "Auspicious", "शुभ", "शुभम्")
|
|
411
413
|
}
|
|
412
414
|
|
|
413
415
|
interface ChoghadiyaInfo {
|
|
@@ -418,9 +420,10 @@ interface ChoghadiyaInfo {
|
|
|
418
420
|
// ── Gowri Panchangam ─────────────────────────────────────────────────────────
|
|
419
421
|
|
|
420
422
|
interface GowriSlot extends TimePeriod {
|
|
421
|
-
index: number;
|
|
422
|
-
name: string;
|
|
423
|
-
quality: ChoghadiyaQuality;
|
|
423
|
+
index: number; // 0–7 within the 8-name cycle
|
|
424
|
+
name: string; // e.g. "Amrit", "Kaal", "Shubh" (localized)
|
|
425
|
+
quality: ChoghadiyaQuality; // programmatic key: 'auspicious' | 'inauspicious' | 'neutral'
|
|
426
|
+
qualityName: string; // localized display name (e.g. "Auspicious", "शुभ", "शुभम्")
|
|
424
427
|
}
|
|
425
428
|
|
|
426
429
|
interface GowriInfo {
|
|
@@ -452,7 +455,7 @@ interface SpecialYogaInfo {
|
|
|
452
455
|
interface FestivalInfo {
|
|
453
456
|
name: string; // e.g. "Diwali", "Ekadashi"
|
|
454
457
|
type: 'major' | 'minor' | 'ekadashi' | 'pradosha' | 'sankranti';
|
|
455
|
-
description?: string; // For sankranti:
|
|
458
|
+
description?: string; // For sankranti: localized rashi name (e.g. "Makara", "मकर")
|
|
456
459
|
}
|
|
457
460
|
|
|
458
461
|
// Detection rules:
|
package/dist/index.cjs
CHANGED
|
@@ -2789,12 +2789,11 @@ function validateOffset(offset) {
|
|
|
2789
2789
|
}
|
|
2790
2790
|
|
|
2791
2791
|
// src/core/tithi.ts
|
|
2792
|
-
function computeTithiFromLongitudes(siderealMoon, siderealSun, name) {
|
|
2792
|
+
function computeTithiFromLongitudes(siderealMoon, siderealSun, name, paksha) {
|
|
2793
2793
|
const angle = normalize360(siderealMoon - siderealSun);
|
|
2794
2794
|
const index = Math.floor(angle / TITHI_SPAN);
|
|
2795
2795
|
const elapsed = angle - index * TITHI_SPAN;
|
|
2796
2796
|
const completionPercentage = elapsed / TITHI_SPAN * 100;
|
|
2797
|
-
const paksha = index < 15 ? "Shukla" : "Krishna";
|
|
2798
2797
|
const number = index < 15 ? index + 1 : index - 14;
|
|
2799
2798
|
return {
|
|
2800
2799
|
index,
|
|
@@ -2949,50 +2948,38 @@ var GOWRI_QUALITY = [
|
|
|
2949
2948
|
];
|
|
2950
2949
|
var DAY_START_INDEX = [6, 5, 4, 3, 2, 1, 0];
|
|
2951
2950
|
var NIGHT_START_INDEX = [2, 1, 0, 7, 6, 5, 4];
|
|
2952
|
-
function buildSlots(reference, durationMs, startIndex, nameFn) {
|
|
2951
|
+
function buildSlots(reference, durationMs, startIndex, nameFn, qualityNameFn) {
|
|
2953
2952
|
const slotMs = durationMs / 8;
|
|
2954
2953
|
const slots = [];
|
|
2955
2954
|
for (let i = 0; i < 8; i++) {
|
|
2956
2955
|
const idx = (startIndex + i) % 8;
|
|
2956
|
+
const quality = GOWRI_QUALITY[idx];
|
|
2957
2957
|
slots.push({
|
|
2958
2958
|
start: new Date(reference.getTime() + i * slotMs),
|
|
2959
2959
|
end: new Date(reference.getTime() + (i + 1) * slotMs),
|
|
2960
2960
|
index: idx,
|
|
2961
2961
|
name: nameFn(idx),
|
|
2962
|
-
quality
|
|
2962
|
+
quality,
|
|
2963
|
+
qualityName: qualityNameFn(quality)
|
|
2963
2964
|
});
|
|
2964
2965
|
}
|
|
2965
2966
|
return slots;
|
|
2966
2967
|
}
|
|
2967
|
-
function computeGowriPanchangam(sunrise, sunset, nextSunrise, varaIndex, nameFn) {
|
|
2968
|
+
function computeGowriPanchangam(sunrise, sunset, nextSunrise, varaIndex, nameFn, qualityNameFn) {
|
|
2968
2969
|
const dayMs = sunset.getTime() - sunrise.getTime();
|
|
2969
2970
|
const nightMs = nextSunrise.getTime() - sunset.getTime();
|
|
2970
2971
|
return {
|
|
2971
|
-
day: buildSlots(sunrise, dayMs, DAY_START_INDEX[varaIndex], nameFn),
|
|
2972
|
-
night: buildSlots(sunset, nightMs, NIGHT_START_INDEX[varaIndex], nameFn)
|
|
2972
|
+
day: buildSlots(sunrise, dayMs, DAY_START_INDEX[varaIndex], nameFn, qualityNameFn),
|
|
2973
|
+
night: buildSlots(sunset, nightMs, NIGHT_START_INDEX[varaIndex], nameFn, qualityNameFn)
|
|
2973
2974
|
};
|
|
2974
2975
|
}
|
|
2975
2976
|
|
|
2976
2977
|
// src/core/masa.ts
|
|
2977
|
-
|
|
2978
|
-
"Mesha",
|
|
2979
|
-
"Vrishabha",
|
|
2980
|
-
"Mithuna",
|
|
2981
|
-
"Karka",
|
|
2982
|
-
"Simha",
|
|
2983
|
-
"Kanya",
|
|
2984
|
-
"Tula",
|
|
2985
|
-
"Vrischika",
|
|
2986
|
-
"Dhanus",
|
|
2987
|
-
"Makara",
|
|
2988
|
-
"Kumbha",
|
|
2989
|
-
"Meena"
|
|
2990
|
-
];
|
|
2991
|
-
function computeMasa(siderealSunLon) {
|
|
2978
|
+
function computeMasa(siderealSunLon, nameResolver) {
|
|
2992
2979
|
const index = Math.floor(siderealSunLon / 30);
|
|
2993
2980
|
return {
|
|
2994
2981
|
index,
|
|
2995
|
-
name:
|
|
2982
|
+
name: nameResolver(index)
|
|
2996
2983
|
};
|
|
2997
2984
|
}
|
|
2998
2985
|
|
|
@@ -3055,27 +3042,29 @@ var CHOGHADIYA_QUALITY = [
|
|
|
3055
3042
|
];
|
|
3056
3043
|
var DAY_START_INDEX2 = [0, 3, 6, 2, 5, 1, 4];
|
|
3057
3044
|
var NIGHT_START_INDEX2 = [5, 1, 4, 6, 0, 3, 2];
|
|
3058
|
-
function buildSlots2(reference, durationMs, startIndex, nameFn, count) {
|
|
3045
|
+
function buildSlots2(reference, durationMs, startIndex, nameFn, qualityNameFn, count) {
|
|
3059
3046
|
const slotMs = durationMs / count;
|
|
3060
3047
|
const slots = [];
|
|
3061
3048
|
for (let i = 0; i < count; i++) {
|
|
3062
3049
|
const idx = (startIndex + i) % 7;
|
|
3050
|
+
const quality = CHOGHADIYA_QUALITY[idx];
|
|
3063
3051
|
slots.push({
|
|
3064
3052
|
start: new Date(reference.getTime() + i * slotMs),
|
|
3065
3053
|
end: new Date(reference.getTime() + (i + 1) * slotMs),
|
|
3066
3054
|
index: idx,
|
|
3067
3055
|
name: nameFn(idx),
|
|
3068
|
-
quality
|
|
3056
|
+
quality,
|
|
3057
|
+
qualityName: qualityNameFn(quality)
|
|
3069
3058
|
});
|
|
3070
3059
|
}
|
|
3071
3060
|
return slots;
|
|
3072
3061
|
}
|
|
3073
|
-
function computeChoghadiya(sunrise, sunset, nextSunrise, varaIndex, nameFn) {
|
|
3062
|
+
function computeChoghadiya(sunrise, sunset, nextSunrise, varaIndex, nameFn, qualityNameFn) {
|
|
3074
3063
|
const dayMs = sunset.getTime() - sunrise.getTime();
|
|
3075
3064
|
const nightMs = nextSunrise.getTime() - sunset.getTime();
|
|
3076
3065
|
return {
|
|
3077
|
-
day: buildSlots2(sunrise, dayMs, DAY_START_INDEX2[varaIndex], nameFn, 8),
|
|
3078
|
-
night: buildSlots2(sunset, nightMs, NIGHT_START_INDEX2[varaIndex], nameFn, 8)
|
|
3066
|
+
day: buildSlots2(sunrise, dayMs, DAY_START_INDEX2[varaIndex], nameFn, qualityNameFn, 8),
|
|
3067
|
+
night: buildSlots2(sunset, nightMs, NIGHT_START_INDEX2[varaIndex], nameFn, qualityNameFn, 8)
|
|
3079
3068
|
};
|
|
3080
3069
|
}
|
|
3081
3070
|
|
|
@@ -3234,7 +3223,7 @@ var FESTIVAL_REGISTRY = [
|
|
|
3234
3223
|
// Bhadrapada (5) — end of Pitru Paksha
|
|
3235
3224
|
{ key: "mahalaya_amavasya", masa: 5, tithi: 29, type: "major" }
|
|
3236
3225
|
];
|
|
3237
|
-
function computeFestivals(tithiIndex, _nakshatraIndex, chandraMasaIndex, isAdhika, _varaIndex, siderealSun, nameResolver) {
|
|
3226
|
+
function computeFestivals(tithiIndex, _nakshatraIndex, chandraMasaIndex, isAdhika, _varaIndex, siderealSun, nameResolver, rashiNameResolver) {
|
|
3238
3227
|
const results = [];
|
|
3239
3228
|
if (!isAdhika) {
|
|
3240
3229
|
for (const rule of FESTIVAL_REGISTRY) {
|
|
@@ -3261,10 +3250,11 @@ function computeFestivals(tithiIndex, _nakshatraIndex, chandraMasaIndex, isAdhik
|
|
|
3261
3250
|
const degInRashi = siderealSun % 30;
|
|
3262
3251
|
if (degInRashi < 1) {
|
|
3263
3252
|
const rashiIndex = Math.floor(siderealSun / 30) % 12;
|
|
3253
|
+
const rashiName = rashiNameResolver ? rashiNameResolver(rashiIndex) : `Rashi ${rashiIndex}`;
|
|
3264
3254
|
results.push({
|
|
3265
3255
|
name: nameResolver("sankranti"),
|
|
3266
3256
|
type: "sankranti",
|
|
3267
|
-
description:
|
|
3257
|
+
description: rashiName
|
|
3268
3258
|
});
|
|
3269
3259
|
}
|
|
3270
3260
|
return results;
|
|
@@ -3413,6 +3403,7 @@ var en = {
|
|
|
3413
3403
|
choghadiyaNames: ["Udveg", "Char", "Labh", "Amrit", "Kaal", "Shubh", "Rog"],
|
|
3414
3404
|
gowriNames: ["Udyog", "Amrit", "Roga", "Laabh", "Shubh", "Kaal", "Dhan", "Chal"],
|
|
3415
3405
|
grahaNames: ["Sun", "Venus", "Mercury", "Moon", "Saturn", "Jupiter", "Mars"],
|
|
3406
|
+
qualityNames: { auspicious: "Auspicious", inauspicious: "Inauspicious", neutral: "Neutral" },
|
|
3416
3407
|
specialYogaNames: {
|
|
3417
3408
|
amrit_siddhi: "Amrit Siddhi Yoga",
|
|
3418
3409
|
sarvartha_siddhi: "Sarvartha Siddhi Yoga",
|
|
@@ -3576,6 +3567,7 @@ var sa = {
|
|
|
3576
3567
|
choghadiyaNames: ["\u0909\u0926\u094D\u0935\u0947\u0917", "\u091A\u0930", "\u0932\u093E\u092D", "\u0905\u092E\u0943\u0924", "\u0915\u093E\u0932", "\u0936\u0941\u092D", "\u0930\u094B\u0917"],
|
|
3577
3568
|
gowriNames: ["\u0909\u0926\u094D\u092F\u094B\u0917", "\u0905\u092E\u0943\u0924", "\u0930\u094B\u0917", "\u0932\u093E\u092D", "\u0936\u0941\u092D", "\u0915\u093E\u0932", "\u0927\u0928", "\u091A\u0932"],
|
|
3578
3569
|
grahaNames: ["\u0938\u0942\u0930\u094D\u092F", "\u0936\u0941\u0915\u094D\u0930", "\u092C\u0941\u0927", "\u091A\u0928\u094D\u0926\u094D\u0930", "\u0936\u0928\u093F", "\u0917\u0941\u0930\u0941", "\u092E\u0919\u094D\u0917\u0932"],
|
|
3570
|
+
qualityNames: { auspicious: "\u0936\u0941\u092D\u092E\u094D", inauspicious: "\u0905\u0936\u0941\u092D\u092E\u094D", neutral: "\u0938\u093E\u092E\u093E\u0928\u094D\u092F\u092E\u094D" },
|
|
3579
3571
|
specialYogaNames: {
|
|
3580
3572
|
amrit_siddhi: "\u0905\u092E\u0943\u0924 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
3581
3573
|
sarvartha_siddhi: "\u0938\u0930\u094D\u0935\u093E\u0930\u094D\u0925 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
@@ -3619,13 +3611,178 @@ var sa = {
|
|
|
3619
3611
|
};
|
|
3620
3612
|
|
|
3621
3613
|
// src/i18n/hi.ts
|
|
3622
|
-
var hi = {
|
|
3614
|
+
var hi = {
|
|
3615
|
+
tithiNames: [
|
|
3616
|
+
"\u092A\u094D\u0930\u0924\u093F\u092A\u0926\u093E",
|
|
3617
|
+
"\u0926\u094D\u0935\u093F\u0924\u0940\u092F\u093E",
|
|
3618
|
+
"\u0924\u0943\u0924\u0940\u092F\u093E",
|
|
3619
|
+
"\u091A\u0924\u0941\u0930\u094D\u0925\u0940",
|
|
3620
|
+
"\u092A\u0902\u091A\u092E\u0940",
|
|
3621
|
+
"\u0937\u0937\u094D\u0920\u0940",
|
|
3622
|
+
"\u0938\u092A\u094D\u0924\u092E\u0940",
|
|
3623
|
+
"\u0905\u0937\u094D\u091F\u092E\u0940",
|
|
3624
|
+
"\u0928\u0935\u092E\u0940",
|
|
3625
|
+
"\u0926\u0936\u092E\u0940",
|
|
3626
|
+
"\u090F\u0915\u093E\u0926\u0936\u0940",
|
|
3627
|
+
"\u0926\u094D\u0935\u093E\u0926\u0936\u0940",
|
|
3628
|
+
"\u0924\u094D\u0930\u092F\u094B\u0926\u0936\u0940",
|
|
3629
|
+
"\u091A\u0924\u0941\u0930\u094D\u0926\u0936\u0940"
|
|
3630
|
+
],
|
|
3631
|
+
nakshatraNames: [
|
|
3632
|
+
"\u0905\u0936\u094D\u0935\u093F\u0928\u0940",
|
|
3633
|
+
"\u092D\u0930\u0923\u0940",
|
|
3634
|
+
"\u0915\u0943\u0924\u094D\u0924\u093F\u0915\u093E",
|
|
3635
|
+
"\u0930\u094B\u0939\u093F\u0923\u0940",
|
|
3636
|
+
"\u092E\u0943\u0917\u0936\u093F\u0930\u093E",
|
|
3637
|
+
"\u0906\u0930\u094D\u0926\u094D\u0930\u093E",
|
|
3638
|
+
"\u092A\u0941\u0928\u0930\u094D\u0935\u0938\u0941",
|
|
3639
|
+
"\u092A\u0941\u0937\u094D\u092F",
|
|
3640
|
+
"\u0906\u0936\u094D\u0932\u0947\u0937\u093E",
|
|
3641
|
+
"\u092E\u0918\u093E",
|
|
3642
|
+
"\u092A\u0942\u0930\u094D\u0935\u093E \u092B\u093E\u0932\u094D\u0917\u0941\u0928\u0940",
|
|
3643
|
+
"\u0909\u0924\u094D\u0924\u0930\u093E \u092B\u093E\u0932\u094D\u0917\u0941\u0928\u0940",
|
|
3644
|
+
"\u0939\u0938\u094D\u0924",
|
|
3645
|
+
"\u091A\u093F\u0924\u094D\u0930\u093E",
|
|
3646
|
+
"\u0938\u094D\u0935\u093E\u0924\u093F",
|
|
3647
|
+
"\u0935\u093F\u0936\u093E\u0916\u093E",
|
|
3648
|
+
"\u0905\u0928\u0941\u0930\u093E\u0927\u093E",
|
|
3649
|
+
"\u091C\u094D\u092F\u0947\u0937\u094D\u0920\u093E",
|
|
3650
|
+
"\u092E\u0942\u0932",
|
|
3651
|
+
"\u092A\u0942\u0930\u094D\u0935\u093E\u0937\u093E\u0922\u093C\u093E",
|
|
3652
|
+
"\u0909\u0924\u094D\u0924\u0930\u093E\u0937\u093E\u0922\u093C\u093E",
|
|
3653
|
+
"\u0936\u094D\u0930\u0935\u0923",
|
|
3654
|
+
"\u0927\u0928\u093F\u0937\u094D\u0920\u093E",
|
|
3655
|
+
"\u0936\u0924\u092D\u093F\u0937\u093E",
|
|
3656
|
+
"\u092A\u0942\u0930\u094D\u0935\u093E \u092D\u093E\u0926\u094D\u0930\u092A\u0926",
|
|
3657
|
+
"\u0909\u0924\u094D\u0924\u0930\u093E \u092D\u093E\u0926\u094D\u0930\u092A\u0926",
|
|
3658
|
+
"\u0930\u0947\u0935\u0924\u0940"
|
|
3659
|
+
],
|
|
3660
|
+
yogaNames: [
|
|
3661
|
+
"\u0935\u093F\u0937\u094D\u0915\u092E\u094D\u092D",
|
|
3662
|
+
"\u092A\u094D\u0930\u0940\u0924\u093F",
|
|
3663
|
+
"\u0906\u092F\u0941\u0937\u094D\u092E\u093E\u0928",
|
|
3664
|
+
"\u0938\u094C\u092D\u093E\u0917\u094D\u092F",
|
|
3665
|
+
"\u0936\u094B\u092D\u0928",
|
|
3666
|
+
"\u0905\u0924\u093F\u0917\u0902\u0921",
|
|
3667
|
+
"\u0938\u0941\u0915\u0930\u094D\u092E\u093E",
|
|
3668
|
+
"\u0927\u0943\u0924\u093F",
|
|
3669
|
+
"\u0936\u0942\u0932",
|
|
3670
|
+
"\u0917\u0902\u0921",
|
|
3671
|
+
"\u0935\u0943\u0926\u094D\u0927\u093F",
|
|
3672
|
+
"\u0927\u094D\u0930\u0941\u0935",
|
|
3673
|
+
"\u0935\u094D\u092F\u093E\u0918\u093E\u0924",
|
|
3674
|
+
"\u0939\u0930\u094D\u0937\u0923",
|
|
3675
|
+
"\u0935\u091C\u094D\u0930",
|
|
3676
|
+
"\u0938\u093F\u0926\u094D\u0927\u093F",
|
|
3677
|
+
"\u0935\u094D\u092F\u0924\u0940\u092A\u093E\u0924",
|
|
3678
|
+
"\u0935\u0930\u0940\u092F\u093E\u0928",
|
|
3679
|
+
"\u092A\u0930\u093F\u0918",
|
|
3680
|
+
"\u0936\u093F\u0935",
|
|
3681
|
+
"\u0938\u093F\u0926\u094D\u0927",
|
|
3682
|
+
"\u0938\u093E\u0927\u094D\u092F",
|
|
3683
|
+
"\u0936\u0941\u092D",
|
|
3684
|
+
"\u0936\u0941\u0915\u094D\u0932",
|
|
3685
|
+
"\u092C\u094D\u0930\u0939\u094D\u092E",
|
|
3686
|
+
"\u0907\u0902\u0926\u094D\u0930",
|
|
3687
|
+
"\u0935\u0948\u0927\u0943\u0924\u093F"
|
|
3688
|
+
],
|
|
3689
|
+
karanaNames: {
|
|
3690
|
+
movable: ["\u092C\u0935", "\u092C\u093E\u0932\u0935", "\u0915\u094C\u0932\u0935", "\u0924\u0948\u0924\u093F\u0932", "\u0917\u0930", "\u0935\u0923\u093F\u091C", "\u0935\u093F\u0937\u094D\u091F\u093F"],
|
|
3691
|
+
fixed: ["\u0915\u093F\u0902\u0938\u094D\u0924\u0941\u0918\u094D\u0928", "\u0936\u0915\u0941\u0928\u093F", "\u091A\u0924\u0941\u0937\u094D\u092A\u0926", "\u0928\u093E\u0917"]
|
|
3692
|
+
},
|
|
3693
|
+
varaNames: [
|
|
3694
|
+
{ name: "\u0930\u0935\u093F\u0935\u093E\u0930", short: "\u0930\u0935\u093F" },
|
|
3695
|
+
{ name: "\u0938\u094B\u092E\u0935\u093E\u0930", short: "\u0938\u094B\u092E" },
|
|
3696
|
+
{ name: "\u092E\u0902\u0917\u0932\u0935\u093E\u0930", short: "\u092E\u0902\u0917\u0932" },
|
|
3697
|
+
{ name: "\u092C\u0941\u0927\u0935\u093E\u0930", short: "\u092C\u0941\u0927" },
|
|
3698
|
+
{ name: "\u0917\u0941\u0930\u0941\u0935\u093E\u0930", short: "\u0917\u0941\u0930\u0941" },
|
|
3699
|
+
{ name: "\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930", short: "\u0936\u0941\u0915\u094D\u0930" },
|
|
3700
|
+
{ name: "\u0936\u0928\u093F\u0935\u093E\u0930", short: "\u0936\u0928\u093F" }
|
|
3701
|
+
],
|
|
3702
|
+
pakshaNames: { shukla: "\u0936\u0941\u0915\u094D\u0932", krishna: "\u0915\u0943\u0937\u094D\u0923" },
|
|
3703
|
+
masaNames: [
|
|
3704
|
+
"\u092E\u0947\u0937",
|
|
3705
|
+
"\u0935\u0943\u0937\u092D",
|
|
3706
|
+
"\u092E\u093F\u0925\u0941\u0928",
|
|
3707
|
+
"\u0915\u0930\u094D\u0915",
|
|
3708
|
+
"\u0938\u093F\u0902\u0939",
|
|
3709
|
+
"\u0915\u0928\u094D\u092F\u093E",
|
|
3710
|
+
"\u0924\u0941\u0932\u093E",
|
|
3711
|
+
"\u0935\u0943\u0936\u094D\u091A\u093F\u0915",
|
|
3712
|
+
"\u0927\u0928\u0941",
|
|
3713
|
+
"\u092E\u0915\u0930",
|
|
3714
|
+
"\u0915\u0941\u0902\u092D",
|
|
3715
|
+
"\u092E\u0940\u0928"
|
|
3716
|
+
],
|
|
3717
|
+
chandraMasaNames: [
|
|
3718
|
+
"\u091A\u0948\u0924\u094D\u0930",
|
|
3719
|
+
"\u0935\u0948\u0936\u093E\u0916",
|
|
3720
|
+
"\u091C\u094D\u092F\u0947\u0937\u094D\u0920",
|
|
3721
|
+
"\u0906\u0937\u093E\u0922\u093C",
|
|
3722
|
+
"\u0936\u094D\u0930\u093E\u0935\u0923",
|
|
3723
|
+
"\u092D\u093E\u0926\u094D\u0930\u092A\u0926",
|
|
3724
|
+
"\u0906\u0936\u094D\u0935\u093F\u0928",
|
|
3725
|
+
"\u0915\u093E\u0930\u094D\u0924\u093F\u0915",
|
|
3726
|
+
"\u092E\u093E\u0930\u094D\u0917\u0936\u0940\u0930\u094D\u0937",
|
|
3727
|
+
"\u092A\u094C\u0937",
|
|
3728
|
+
"\u092E\u093E\u0918",
|
|
3729
|
+
"\u092B\u093E\u0932\u094D\u0917\u0941\u0928"
|
|
3730
|
+
],
|
|
3731
|
+
choghadiyaNames: ["\u0909\u0926\u094D\u0935\u0947\u0917", "\u091A\u0930", "\u0932\u093E\u092D", "\u0905\u092E\u0943\u0924", "\u0915\u093E\u0932", "\u0936\u0941\u092D", "\u0930\u094B\u0917"],
|
|
3732
|
+
gowriNames: ["\u0909\u0926\u094D\u092F\u094B\u0917", "\u0905\u092E\u0943\u0924", "\u0930\u094B\u0917", "\u0932\u093E\u092D", "\u0936\u0941\u092D", "\u0915\u093E\u0932", "\u0927\u0928", "\u091A\u0932"],
|
|
3733
|
+
grahaNames: ["\u0938\u0942\u0930\u094D\u092F", "\u0936\u0941\u0915\u094D\u0930", "\u092C\u0941\u0927", "\u091A\u0902\u0926\u094D\u0930", "\u0936\u0928\u093F", "\u0917\u0941\u0930\u0941", "\u092E\u0902\u0917\u0932"],
|
|
3734
|
+
qualityNames: { auspicious: "\u0936\u0941\u092D", inauspicious: "\u0905\u0936\u0941\u092D", neutral: "\u0938\u093E\u092E\u093E\u0928\u094D\u092F" },
|
|
3735
|
+
specialYogaNames: {
|
|
3736
|
+
amrit_siddhi: "\u0905\u092E\u0943\u0924 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
3737
|
+
sarvartha_siddhi: "\u0938\u0930\u094D\u0935\u093E\u0930\u094D\u0925 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
3738
|
+
ravi_pushya: "\u0930\u0935\u093F \u092A\u0941\u0937\u094D\u092F \u092F\u094B\u0917",
|
|
3739
|
+
guru_pushya: "\u0917\u0941\u0930\u0941 \u092A\u0941\u0937\u094D\u092F \u092F\u094B\u0917"
|
|
3740
|
+
},
|
|
3741
|
+
festivalNames: {
|
|
3742
|
+
ugadi: "\u0909\u0917\u093E\u0926\u0940",
|
|
3743
|
+
rama_navami: "\u0930\u093E\u092E \u0928\u0935\u092E\u0940",
|
|
3744
|
+
hanuman_jayanti: "\u0939\u0928\u0941\u092E\u093E\u0928 \u091C\u092F\u0902\u0924\u0940",
|
|
3745
|
+
akshaya_tritiya: "\u0905\u0915\u094D\u0937\u092F \u0924\u0943\u0924\u0940\u092F\u093E",
|
|
3746
|
+
guru_purnima: "\u0917\u0941\u0930\u0941 \u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E",
|
|
3747
|
+
nag_panchami: "\u0928\u093E\u0917 \u092A\u0902\u091A\u092E\u0940",
|
|
3748
|
+
raksha_bandhan: "\u0930\u0915\u094D\u0937\u093E \u092C\u0902\u0927\u0928",
|
|
3749
|
+
krishna_janmashtami: "\u0915\u0943\u0937\u094D\u0923 \u091C\u0928\u094D\u092E\u093E\u0937\u094D\u091F\u092E\u0940",
|
|
3750
|
+
ganesh_chaturthi: "\u0917\u0923\u0947\u0936 \u091A\u0924\u0941\u0930\u094D\u0925\u0940",
|
|
3751
|
+
anant_chaturdashi: "\u0905\u0928\u0902\u0924 \u091A\u0924\u0941\u0930\u094D\u0926\u0936\u0940",
|
|
3752
|
+
navaratri: "\u0936\u0930\u0926 \u0928\u0935\u0930\u093E\u0924\u094D\u0930\u093F",
|
|
3753
|
+
durga_ashtami: "\u0926\u0941\u0930\u094D\u0917\u093E \u0905\u0937\u094D\u091F\u092E\u0940",
|
|
3754
|
+
maha_navami: "\u092E\u0939\u093E \u0928\u0935\u092E\u0940",
|
|
3755
|
+
dussehra: "\u0926\u0936\u0939\u0930\u093E",
|
|
3756
|
+
sharad_purnima: "\u0936\u0930\u0926 \u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E",
|
|
3757
|
+
karva_chauth: "\u0915\u0930\u0935\u093E \u091A\u094C\u0925",
|
|
3758
|
+
dhanteras: "\u0927\u0928\u0924\u0947\u0930\u0938",
|
|
3759
|
+
narak_chaturdashi: "\u0928\u0930\u0915 \u091A\u0924\u0941\u0930\u094D\u0926\u0936\u0940",
|
|
3760
|
+
diwali: "\u0926\u093F\u0935\u093E\u0932\u0940",
|
|
3761
|
+
vasant_panchami: "\u0935\u0938\u0902\u0924 \u092A\u0902\u091A\u092E\u0940",
|
|
3762
|
+
maha_shivaratri: "\u092E\u0939\u093E \u0936\u093F\u0935\u0930\u093E\u0924\u094D\u0930\u093F",
|
|
3763
|
+
holi: "\u0939\u094B\u0932\u0940",
|
|
3764
|
+
mahalaya_amavasya: "\u092E\u0939\u093E\u0932\u092F \u0905\u092E\u093E\u0935\u0938\u094D\u092F\u093E",
|
|
3765
|
+
kartika_purnima: "\u0915\u093E\u0930\u094D\u0924\u093F\u0915 \u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E"
|
|
3766
|
+
},
|
|
3767
|
+
misc: {
|
|
3768
|
+
purnima: "\u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E",
|
|
3769
|
+
amavasya: "\u0905\u092E\u093E\u0935\u0938\u094D\u092F\u093E",
|
|
3770
|
+
adhika: "\u0905\u0927\u093F\u0915",
|
|
3771
|
+
ekadashi: "\u090F\u0915\u093E\u0926\u0936\u0940",
|
|
3772
|
+
pradosha: "\u092A\u094D\u0930\u0926\u094B\u0937 \u0935\u094D\u0930\u0924",
|
|
3773
|
+
sankranti: "\u0938\u0902\u0915\u094D\u0930\u093E\u0902\u0924\u093F"
|
|
3774
|
+
}
|
|
3775
|
+
};
|
|
3623
3776
|
|
|
3624
3777
|
// src/i18n/resolver.ts
|
|
3625
3778
|
var TRANSLATIONS = { en, sa, hi };
|
|
3626
3779
|
function getTranslations(lang) {
|
|
3627
3780
|
return TRANSLATIONS[lang] ?? en;
|
|
3628
3781
|
}
|
|
3782
|
+
function resolvePakshaName(index, lang) {
|
|
3783
|
+
const t = getTranslations(lang);
|
|
3784
|
+
return index < 15 ? t.pakshaNames.shukla : t.pakshaNames.krishna;
|
|
3785
|
+
}
|
|
3629
3786
|
function resolveTithiName(index, lang) {
|
|
3630
3787
|
const t = getTranslations(lang);
|
|
3631
3788
|
if (index === 14) return t.misc.purnima;
|
|
@@ -3669,10 +3826,12 @@ function getInstantPanchang(date, location, options) {
|
|
|
3669
3826
|
const siderealMoon = getMoon(date);
|
|
3670
3827
|
const siderealSun = getSun(date);
|
|
3671
3828
|
const ayanamsaValue = computeAyanamsa(date, ayanamsaType);
|
|
3829
|
+
const tithiIdx = getTithiIndexFromLons(siderealMoon, siderealSun);
|
|
3672
3830
|
const tithi = computeTithiFromLongitudes(
|
|
3673
3831
|
siderealMoon,
|
|
3674
3832
|
siderealSun,
|
|
3675
|
-
resolveTithiName(
|
|
3833
|
+
resolveTithiName(tithiIdx, lang),
|
|
3834
|
+
resolvePakshaName(tithiIdx, lang)
|
|
3676
3835
|
);
|
|
3677
3836
|
const nakshatra = computeNakshatraFromLongitude(
|
|
3678
3837
|
siderealMoon,
|
|
@@ -3751,7 +3910,8 @@ function getInstantPanchang(date, location, options) {
|
|
|
3751
3910
|
chandramasa.isAdhika,
|
|
3752
3911
|
vara.index,
|
|
3753
3912
|
siderealSun,
|
|
3754
|
-
(key) => t.festivalNames[key] ?? t.misc[key] ?? key
|
|
3913
|
+
(key) => t.festivalNames[key] ?? t.misc[key] ?? key,
|
|
3914
|
+
(idx) => resolveMasaName(idx, lang)
|
|
3755
3915
|
);
|
|
3756
3916
|
return {
|
|
3757
3917
|
timestamp: date,
|
|
@@ -3791,10 +3951,12 @@ function getDailyPanchang(date, location, options) {
|
|
|
3791
3951
|
const siderealMoonAtSunrise = getMoon(sunriseUtc);
|
|
3792
3952
|
const siderealSunAtSunrise = getSun(sunriseUtc);
|
|
3793
3953
|
const ayanamsaValue = computeAyanamsa(sunriseUtc, ayanamsaType);
|
|
3954
|
+
const tithiIdxAtSunrise = getTithiIndexFromLons(siderealMoonAtSunrise, siderealSunAtSunrise);
|
|
3794
3955
|
const tithiAtSunrise = computeTithiFromLongitudes(
|
|
3795
3956
|
siderealMoonAtSunrise,
|
|
3796
3957
|
siderealSunAtSunrise,
|
|
3797
|
-
resolveTithiName(
|
|
3958
|
+
resolveTithiName(tithiIdxAtSunrise, lang),
|
|
3959
|
+
resolvePakshaName(tithiIdxAtSunrise, lang)
|
|
3798
3960
|
);
|
|
3799
3961
|
const nakshatraAtSunrise = computeNakshatraFromLongitude(
|
|
3800
3962
|
siderealMoonAtSunrise,
|
|
@@ -3811,7 +3973,7 @@ function getDailyPanchang(date, location, options) {
|
|
|
3811
3973
|
resolveKaranaName(getKaranaIndex(siderealMoonAtSunrise, siderealSunAtSunrise), lang)
|
|
3812
3974
|
);
|
|
3813
3975
|
const vara = computeVara(sunriseUtc, sunriseUtc, getTranslations(lang).varaNames);
|
|
3814
|
-
const masa = computeMasa(siderealSunAtSunrise);
|
|
3976
|
+
const masa = computeMasa(siderealSunAtSunrise, (idx) => resolveMasaName(idx, lang));
|
|
3815
3977
|
const chandramasa = computeChandraMasa(
|
|
3816
3978
|
siderealSunAtSunrise,
|
|
3817
3979
|
siderealMoonAtSunrise,
|
|
@@ -3827,12 +3989,14 @@ function getDailyPanchang(date, location, options) {
|
|
|
3827
3989
|
(idx) => resolveNakshatraName(idx, lang)
|
|
3828
3990
|
);
|
|
3829
3991
|
const brahmaMuhurta = computeBrahmaMuhurta(sunriseUtc, sunsetUtc);
|
|
3992
|
+
const qualityNameFn = (q) => getTranslations(lang).qualityNames[q];
|
|
3830
3993
|
const choghadiya = computeChoghadiya(
|
|
3831
3994
|
sunriseUtc,
|
|
3832
3995
|
sunsetUtc,
|
|
3833
3996
|
nextSunriseUtc,
|
|
3834
3997
|
vara.index,
|
|
3835
|
-
(idx) => getTranslations(lang).choghadiyaNames[idx]
|
|
3998
|
+
(idx) => getTranslations(lang).choghadiyaNames[idx],
|
|
3999
|
+
qualityNameFn
|
|
3836
4000
|
);
|
|
3837
4001
|
const hora = computeHora(
|
|
3838
4002
|
sunriseUtc,
|
|
@@ -3846,7 +4010,8 @@ function getDailyPanchang(date, location, options) {
|
|
|
3846
4010
|
sunsetUtc,
|
|
3847
4011
|
nextSunriseUtc,
|
|
3848
4012
|
vara.index,
|
|
3849
|
-
(idx) => getTranslations(lang).gowriNames[idx]
|
|
4013
|
+
(idx) => getTranslations(lang).gowriNames[idx],
|
|
4014
|
+
qualityNameFn
|
|
3850
4015
|
);
|
|
3851
4016
|
const moonriseUtc = getMoonrise(localMidnightUtc, location);
|
|
3852
4017
|
const moonsetUtc = getMoonset(localMidnightUtc, location);
|
|
@@ -3866,7 +4031,8 @@ function getDailyPanchang(date, location, options) {
|
|
|
3866
4031
|
chandramasa.isAdhika,
|
|
3867
4032
|
vara.index,
|
|
3868
4033
|
siderealSunAtSunrise,
|
|
3869
|
-
(key) => t.festivalNames[key] ?? t.misc[key] ?? key
|
|
4034
|
+
(key) => t.festivalNames[key] ?? t.misc[key] ?? key,
|
|
4035
|
+
(idx) => resolveMasaName(idx, lang)
|
|
3870
4036
|
);
|
|
3871
4037
|
let tithis;
|
|
3872
4038
|
let nakshatras;
|
|
@@ -3880,7 +4046,8 @@ function getDailyPanchang(date, location, options) {
|
|
|
3880
4046
|
(d) => getTithiIndexAtTime(d, getMoon, getSun),
|
|
3881
4047
|
(d) => {
|
|
3882
4048
|
const moon = getMoon(d), sun = getSun(d);
|
|
3883
|
-
|
|
4049
|
+
const idx = getTithiIndexFromLons(moon, sun);
|
|
4050
|
+
return computeTithiFromLongitudes(moon, sun, resolveTithiName(idx, lang), resolvePakshaName(idx, lang));
|
|
3884
4051
|
},
|
|
3885
4052
|
30,
|
|
3886
4053
|
36,
|
package/dist/index.d.cts
CHANGED
|
@@ -35,7 +35,7 @@ interface ElementBase {
|
|
|
35
35
|
endTime: Date | null;
|
|
36
36
|
}
|
|
37
37
|
interface TithiInfo extends ElementBase {
|
|
38
|
-
paksha:
|
|
38
|
+
paksha: string;
|
|
39
39
|
number: number;
|
|
40
40
|
}
|
|
41
41
|
interface NakshatraInfo extends ElementBase {
|
|
@@ -88,6 +88,8 @@ interface ChoghadiyaSlot extends TimePeriod {
|
|
|
88
88
|
index: number;
|
|
89
89
|
name: string;
|
|
90
90
|
quality: ChoghadiyaQuality;
|
|
91
|
+
/** Localized display name for the quality (e.g. "शुभ" in Hindi) */
|
|
92
|
+
qualityName: string;
|
|
91
93
|
}
|
|
92
94
|
interface ChoghadiyaInfo {
|
|
93
95
|
/** 8 equal slots from sunrise to sunset */
|
|
@@ -100,6 +102,8 @@ interface GowriSlot extends TimePeriod {
|
|
|
100
102
|
index: number;
|
|
101
103
|
name: string;
|
|
102
104
|
quality: ChoghadiyaQuality;
|
|
105
|
+
/** Localized display name for the quality (e.g. "शुभ" in Hindi) */
|
|
106
|
+
qualityName: string;
|
|
103
107
|
}
|
|
104
108
|
interface GowriInfo {
|
|
105
109
|
/** 8 equal slots from sunrise to sunset */
|
|
@@ -502,8 +506,9 @@ declare function computeBrahmaMuhurta(sunrise: Date, sunset: Date): TimePeriod;
|
|
|
502
506
|
* @param nextSunrise UTC next-day sunrise Date.
|
|
503
507
|
* @param varaIndex Weekday index: 0 = Sunday, 6 = Saturday.
|
|
504
508
|
* @param nameFn Callback returning translated Gowri slot name for index 0–7.
|
|
509
|
+
* @param qualityNameFn Callback returning translated quality name.
|
|
505
510
|
*/
|
|
506
|
-
declare function computeGowriPanchangam(sunrise: Date, sunset: Date, nextSunrise: Date, varaIndex: number, nameFn: (index: number) => string): GowriInfo;
|
|
511
|
+
declare function computeGowriPanchangam(sunrise: Date, sunset: Date, nextSunrise: Date, varaIndex: number, nameFn: (index: number) => string, qualityNameFn: (quality: ChoghadiyaQuality) => string): GowriInfo;
|
|
507
512
|
|
|
508
513
|
type PanchangErrorCode = 'INVALID_LATITUDE' | 'INVALID_LONGITUDE' | 'INVALID_ELEVATION' | 'INVALID_DATE' | 'INVALID_TIMEZONE' | 'INVALID_AYANAMSA' | 'TIMEZONE_RESOLUTION_FAILED' | 'NO_SUNRISE' | 'NO_SUNSET' | 'SEARCH_DIVERGED';
|
|
509
514
|
declare class PanchangError extends Error {
|
package/dist/index.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ interface ElementBase {
|
|
|
35
35
|
endTime: Date | null;
|
|
36
36
|
}
|
|
37
37
|
interface TithiInfo extends ElementBase {
|
|
38
|
-
paksha:
|
|
38
|
+
paksha: string;
|
|
39
39
|
number: number;
|
|
40
40
|
}
|
|
41
41
|
interface NakshatraInfo extends ElementBase {
|
|
@@ -88,6 +88,8 @@ interface ChoghadiyaSlot extends TimePeriod {
|
|
|
88
88
|
index: number;
|
|
89
89
|
name: string;
|
|
90
90
|
quality: ChoghadiyaQuality;
|
|
91
|
+
/** Localized display name for the quality (e.g. "शुभ" in Hindi) */
|
|
92
|
+
qualityName: string;
|
|
91
93
|
}
|
|
92
94
|
interface ChoghadiyaInfo {
|
|
93
95
|
/** 8 equal slots from sunrise to sunset */
|
|
@@ -100,6 +102,8 @@ interface GowriSlot extends TimePeriod {
|
|
|
100
102
|
index: number;
|
|
101
103
|
name: string;
|
|
102
104
|
quality: ChoghadiyaQuality;
|
|
105
|
+
/** Localized display name for the quality (e.g. "शुभ" in Hindi) */
|
|
106
|
+
qualityName: string;
|
|
103
107
|
}
|
|
104
108
|
interface GowriInfo {
|
|
105
109
|
/** 8 equal slots from sunrise to sunset */
|
|
@@ -502,8 +506,9 @@ declare function computeBrahmaMuhurta(sunrise: Date, sunset: Date): TimePeriod;
|
|
|
502
506
|
* @param nextSunrise UTC next-day sunrise Date.
|
|
503
507
|
* @param varaIndex Weekday index: 0 = Sunday, 6 = Saturday.
|
|
504
508
|
* @param nameFn Callback returning translated Gowri slot name for index 0–7.
|
|
509
|
+
* @param qualityNameFn Callback returning translated quality name.
|
|
505
510
|
*/
|
|
506
|
-
declare function computeGowriPanchangam(sunrise: Date, sunset: Date, nextSunrise: Date, varaIndex: number, nameFn: (index: number) => string): GowriInfo;
|
|
511
|
+
declare function computeGowriPanchangam(sunrise: Date, sunset: Date, nextSunrise: Date, varaIndex: number, nameFn: (index: number) => string, qualityNameFn: (quality: ChoghadiyaQuality) => string): GowriInfo;
|
|
507
512
|
|
|
508
513
|
type PanchangErrorCode = 'INVALID_LATITUDE' | 'INVALID_LONGITUDE' | 'INVALID_ELEVATION' | 'INVALID_DATE' | 'INVALID_TIMEZONE' | 'INVALID_AYANAMSA' | 'TIMEZONE_RESOLUTION_FAILED' | 'NO_SUNRISE' | 'NO_SUNSET' | 'SEARCH_DIVERGED';
|
|
509
514
|
declare class PanchangError extends Error {
|
package/dist/index.js
CHANGED
|
@@ -2787,12 +2787,11 @@ function validateOffset(offset) {
|
|
|
2787
2787
|
}
|
|
2788
2788
|
|
|
2789
2789
|
// src/core/tithi.ts
|
|
2790
|
-
function computeTithiFromLongitudes(siderealMoon, siderealSun, name) {
|
|
2790
|
+
function computeTithiFromLongitudes(siderealMoon, siderealSun, name, paksha) {
|
|
2791
2791
|
const angle = normalize360(siderealMoon - siderealSun);
|
|
2792
2792
|
const index = Math.floor(angle / TITHI_SPAN);
|
|
2793
2793
|
const elapsed = angle - index * TITHI_SPAN;
|
|
2794
2794
|
const completionPercentage = elapsed / TITHI_SPAN * 100;
|
|
2795
|
-
const paksha = index < 15 ? "Shukla" : "Krishna";
|
|
2796
2795
|
const number = index < 15 ? index + 1 : index - 14;
|
|
2797
2796
|
return {
|
|
2798
2797
|
index,
|
|
@@ -2947,50 +2946,38 @@ var GOWRI_QUALITY = [
|
|
|
2947
2946
|
];
|
|
2948
2947
|
var DAY_START_INDEX = [6, 5, 4, 3, 2, 1, 0];
|
|
2949
2948
|
var NIGHT_START_INDEX = [2, 1, 0, 7, 6, 5, 4];
|
|
2950
|
-
function buildSlots(reference, durationMs, startIndex, nameFn) {
|
|
2949
|
+
function buildSlots(reference, durationMs, startIndex, nameFn, qualityNameFn) {
|
|
2951
2950
|
const slotMs = durationMs / 8;
|
|
2952
2951
|
const slots = [];
|
|
2953
2952
|
for (let i = 0; i < 8; i++) {
|
|
2954
2953
|
const idx = (startIndex + i) % 8;
|
|
2954
|
+
const quality = GOWRI_QUALITY[idx];
|
|
2955
2955
|
slots.push({
|
|
2956
2956
|
start: new Date(reference.getTime() + i * slotMs),
|
|
2957
2957
|
end: new Date(reference.getTime() + (i + 1) * slotMs),
|
|
2958
2958
|
index: idx,
|
|
2959
2959
|
name: nameFn(idx),
|
|
2960
|
-
quality
|
|
2960
|
+
quality,
|
|
2961
|
+
qualityName: qualityNameFn(quality)
|
|
2961
2962
|
});
|
|
2962
2963
|
}
|
|
2963
2964
|
return slots;
|
|
2964
2965
|
}
|
|
2965
|
-
function computeGowriPanchangam(sunrise, sunset, nextSunrise, varaIndex, nameFn) {
|
|
2966
|
+
function computeGowriPanchangam(sunrise, sunset, nextSunrise, varaIndex, nameFn, qualityNameFn) {
|
|
2966
2967
|
const dayMs = sunset.getTime() - sunrise.getTime();
|
|
2967
2968
|
const nightMs = nextSunrise.getTime() - sunset.getTime();
|
|
2968
2969
|
return {
|
|
2969
|
-
day: buildSlots(sunrise, dayMs, DAY_START_INDEX[varaIndex], nameFn),
|
|
2970
|
-
night: buildSlots(sunset, nightMs, NIGHT_START_INDEX[varaIndex], nameFn)
|
|
2970
|
+
day: buildSlots(sunrise, dayMs, DAY_START_INDEX[varaIndex], nameFn, qualityNameFn),
|
|
2971
|
+
night: buildSlots(sunset, nightMs, NIGHT_START_INDEX[varaIndex], nameFn, qualityNameFn)
|
|
2971
2972
|
};
|
|
2972
2973
|
}
|
|
2973
2974
|
|
|
2974
2975
|
// src/core/masa.ts
|
|
2975
|
-
|
|
2976
|
-
"Mesha",
|
|
2977
|
-
"Vrishabha",
|
|
2978
|
-
"Mithuna",
|
|
2979
|
-
"Karka",
|
|
2980
|
-
"Simha",
|
|
2981
|
-
"Kanya",
|
|
2982
|
-
"Tula",
|
|
2983
|
-
"Vrischika",
|
|
2984
|
-
"Dhanus",
|
|
2985
|
-
"Makara",
|
|
2986
|
-
"Kumbha",
|
|
2987
|
-
"Meena"
|
|
2988
|
-
];
|
|
2989
|
-
function computeMasa(siderealSunLon) {
|
|
2976
|
+
function computeMasa(siderealSunLon, nameResolver) {
|
|
2990
2977
|
const index = Math.floor(siderealSunLon / 30);
|
|
2991
2978
|
return {
|
|
2992
2979
|
index,
|
|
2993
|
-
name:
|
|
2980
|
+
name: nameResolver(index)
|
|
2994
2981
|
};
|
|
2995
2982
|
}
|
|
2996
2983
|
|
|
@@ -3053,27 +3040,29 @@ var CHOGHADIYA_QUALITY = [
|
|
|
3053
3040
|
];
|
|
3054
3041
|
var DAY_START_INDEX2 = [0, 3, 6, 2, 5, 1, 4];
|
|
3055
3042
|
var NIGHT_START_INDEX2 = [5, 1, 4, 6, 0, 3, 2];
|
|
3056
|
-
function buildSlots2(reference, durationMs, startIndex, nameFn, count) {
|
|
3043
|
+
function buildSlots2(reference, durationMs, startIndex, nameFn, qualityNameFn, count) {
|
|
3057
3044
|
const slotMs = durationMs / count;
|
|
3058
3045
|
const slots = [];
|
|
3059
3046
|
for (let i = 0; i < count; i++) {
|
|
3060
3047
|
const idx = (startIndex + i) % 7;
|
|
3048
|
+
const quality = CHOGHADIYA_QUALITY[idx];
|
|
3061
3049
|
slots.push({
|
|
3062
3050
|
start: new Date(reference.getTime() + i * slotMs),
|
|
3063
3051
|
end: new Date(reference.getTime() + (i + 1) * slotMs),
|
|
3064
3052
|
index: idx,
|
|
3065
3053
|
name: nameFn(idx),
|
|
3066
|
-
quality
|
|
3054
|
+
quality,
|
|
3055
|
+
qualityName: qualityNameFn(quality)
|
|
3067
3056
|
});
|
|
3068
3057
|
}
|
|
3069
3058
|
return slots;
|
|
3070
3059
|
}
|
|
3071
|
-
function computeChoghadiya(sunrise, sunset, nextSunrise, varaIndex, nameFn) {
|
|
3060
|
+
function computeChoghadiya(sunrise, sunset, nextSunrise, varaIndex, nameFn, qualityNameFn) {
|
|
3072
3061
|
const dayMs = sunset.getTime() - sunrise.getTime();
|
|
3073
3062
|
const nightMs = nextSunrise.getTime() - sunset.getTime();
|
|
3074
3063
|
return {
|
|
3075
|
-
day: buildSlots2(sunrise, dayMs, DAY_START_INDEX2[varaIndex], nameFn, 8),
|
|
3076
|
-
night: buildSlots2(sunset, nightMs, NIGHT_START_INDEX2[varaIndex], nameFn, 8)
|
|
3064
|
+
day: buildSlots2(sunrise, dayMs, DAY_START_INDEX2[varaIndex], nameFn, qualityNameFn, 8),
|
|
3065
|
+
night: buildSlots2(sunset, nightMs, NIGHT_START_INDEX2[varaIndex], nameFn, qualityNameFn, 8)
|
|
3077
3066
|
};
|
|
3078
3067
|
}
|
|
3079
3068
|
|
|
@@ -3232,7 +3221,7 @@ var FESTIVAL_REGISTRY = [
|
|
|
3232
3221
|
// Bhadrapada (5) — end of Pitru Paksha
|
|
3233
3222
|
{ key: "mahalaya_amavasya", masa: 5, tithi: 29, type: "major" }
|
|
3234
3223
|
];
|
|
3235
|
-
function computeFestivals(tithiIndex, _nakshatraIndex, chandraMasaIndex, isAdhika, _varaIndex, siderealSun, nameResolver) {
|
|
3224
|
+
function computeFestivals(tithiIndex, _nakshatraIndex, chandraMasaIndex, isAdhika, _varaIndex, siderealSun, nameResolver, rashiNameResolver) {
|
|
3236
3225
|
const results = [];
|
|
3237
3226
|
if (!isAdhika) {
|
|
3238
3227
|
for (const rule of FESTIVAL_REGISTRY) {
|
|
@@ -3259,10 +3248,11 @@ function computeFestivals(tithiIndex, _nakshatraIndex, chandraMasaIndex, isAdhik
|
|
|
3259
3248
|
const degInRashi = siderealSun % 30;
|
|
3260
3249
|
if (degInRashi < 1) {
|
|
3261
3250
|
const rashiIndex = Math.floor(siderealSun / 30) % 12;
|
|
3251
|
+
const rashiName = rashiNameResolver ? rashiNameResolver(rashiIndex) : `Rashi ${rashiIndex}`;
|
|
3262
3252
|
results.push({
|
|
3263
3253
|
name: nameResolver("sankranti"),
|
|
3264
3254
|
type: "sankranti",
|
|
3265
|
-
description:
|
|
3255
|
+
description: rashiName
|
|
3266
3256
|
});
|
|
3267
3257
|
}
|
|
3268
3258
|
return results;
|
|
@@ -3411,6 +3401,7 @@ var en = {
|
|
|
3411
3401
|
choghadiyaNames: ["Udveg", "Char", "Labh", "Amrit", "Kaal", "Shubh", "Rog"],
|
|
3412
3402
|
gowriNames: ["Udyog", "Amrit", "Roga", "Laabh", "Shubh", "Kaal", "Dhan", "Chal"],
|
|
3413
3403
|
grahaNames: ["Sun", "Venus", "Mercury", "Moon", "Saturn", "Jupiter", "Mars"],
|
|
3404
|
+
qualityNames: { auspicious: "Auspicious", inauspicious: "Inauspicious", neutral: "Neutral" },
|
|
3414
3405
|
specialYogaNames: {
|
|
3415
3406
|
amrit_siddhi: "Amrit Siddhi Yoga",
|
|
3416
3407
|
sarvartha_siddhi: "Sarvartha Siddhi Yoga",
|
|
@@ -3574,6 +3565,7 @@ var sa = {
|
|
|
3574
3565
|
choghadiyaNames: ["\u0909\u0926\u094D\u0935\u0947\u0917", "\u091A\u0930", "\u0932\u093E\u092D", "\u0905\u092E\u0943\u0924", "\u0915\u093E\u0932", "\u0936\u0941\u092D", "\u0930\u094B\u0917"],
|
|
3575
3566
|
gowriNames: ["\u0909\u0926\u094D\u092F\u094B\u0917", "\u0905\u092E\u0943\u0924", "\u0930\u094B\u0917", "\u0932\u093E\u092D", "\u0936\u0941\u092D", "\u0915\u093E\u0932", "\u0927\u0928", "\u091A\u0932"],
|
|
3576
3567
|
grahaNames: ["\u0938\u0942\u0930\u094D\u092F", "\u0936\u0941\u0915\u094D\u0930", "\u092C\u0941\u0927", "\u091A\u0928\u094D\u0926\u094D\u0930", "\u0936\u0928\u093F", "\u0917\u0941\u0930\u0941", "\u092E\u0919\u094D\u0917\u0932"],
|
|
3568
|
+
qualityNames: { auspicious: "\u0936\u0941\u092D\u092E\u094D", inauspicious: "\u0905\u0936\u0941\u092D\u092E\u094D", neutral: "\u0938\u093E\u092E\u093E\u0928\u094D\u092F\u092E\u094D" },
|
|
3577
3569
|
specialYogaNames: {
|
|
3578
3570
|
amrit_siddhi: "\u0905\u092E\u0943\u0924 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
3579
3571
|
sarvartha_siddhi: "\u0938\u0930\u094D\u0935\u093E\u0930\u094D\u0925 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
@@ -3617,13 +3609,178 @@ var sa = {
|
|
|
3617
3609
|
};
|
|
3618
3610
|
|
|
3619
3611
|
// src/i18n/hi.ts
|
|
3620
|
-
var hi = {
|
|
3612
|
+
var hi = {
|
|
3613
|
+
tithiNames: [
|
|
3614
|
+
"\u092A\u094D\u0930\u0924\u093F\u092A\u0926\u093E",
|
|
3615
|
+
"\u0926\u094D\u0935\u093F\u0924\u0940\u092F\u093E",
|
|
3616
|
+
"\u0924\u0943\u0924\u0940\u092F\u093E",
|
|
3617
|
+
"\u091A\u0924\u0941\u0930\u094D\u0925\u0940",
|
|
3618
|
+
"\u092A\u0902\u091A\u092E\u0940",
|
|
3619
|
+
"\u0937\u0937\u094D\u0920\u0940",
|
|
3620
|
+
"\u0938\u092A\u094D\u0924\u092E\u0940",
|
|
3621
|
+
"\u0905\u0937\u094D\u091F\u092E\u0940",
|
|
3622
|
+
"\u0928\u0935\u092E\u0940",
|
|
3623
|
+
"\u0926\u0936\u092E\u0940",
|
|
3624
|
+
"\u090F\u0915\u093E\u0926\u0936\u0940",
|
|
3625
|
+
"\u0926\u094D\u0935\u093E\u0926\u0936\u0940",
|
|
3626
|
+
"\u0924\u094D\u0930\u092F\u094B\u0926\u0936\u0940",
|
|
3627
|
+
"\u091A\u0924\u0941\u0930\u094D\u0926\u0936\u0940"
|
|
3628
|
+
],
|
|
3629
|
+
nakshatraNames: [
|
|
3630
|
+
"\u0905\u0936\u094D\u0935\u093F\u0928\u0940",
|
|
3631
|
+
"\u092D\u0930\u0923\u0940",
|
|
3632
|
+
"\u0915\u0943\u0924\u094D\u0924\u093F\u0915\u093E",
|
|
3633
|
+
"\u0930\u094B\u0939\u093F\u0923\u0940",
|
|
3634
|
+
"\u092E\u0943\u0917\u0936\u093F\u0930\u093E",
|
|
3635
|
+
"\u0906\u0930\u094D\u0926\u094D\u0930\u093E",
|
|
3636
|
+
"\u092A\u0941\u0928\u0930\u094D\u0935\u0938\u0941",
|
|
3637
|
+
"\u092A\u0941\u0937\u094D\u092F",
|
|
3638
|
+
"\u0906\u0936\u094D\u0932\u0947\u0937\u093E",
|
|
3639
|
+
"\u092E\u0918\u093E",
|
|
3640
|
+
"\u092A\u0942\u0930\u094D\u0935\u093E \u092B\u093E\u0932\u094D\u0917\u0941\u0928\u0940",
|
|
3641
|
+
"\u0909\u0924\u094D\u0924\u0930\u093E \u092B\u093E\u0932\u094D\u0917\u0941\u0928\u0940",
|
|
3642
|
+
"\u0939\u0938\u094D\u0924",
|
|
3643
|
+
"\u091A\u093F\u0924\u094D\u0930\u093E",
|
|
3644
|
+
"\u0938\u094D\u0935\u093E\u0924\u093F",
|
|
3645
|
+
"\u0935\u093F\u0936\u093E\u0916\u093E",
|
|
3646
|
+
"\u0905\u0928\u0941\u0930\u093E\u0927\u093E",
|
|
3647
|
+
"\u091C\u094D\u092F\u0947\u0937\u094D\u0920\u093E",
|
|
3648
|
+
"\u092E\u0942\u0932",
|
|
3649
|
+
"\u092A\u0942\u0930\u094D\u0935\u093E\u0937\u093E\u0922\u093C\u093E",
|
|
3650
|
+
"\u0909\u0924\u094D\u0924\u0930\u093E\u0937\u093E\u0922\u093C\u093E",
|
|
3651
|
+
"\u0936\u094D\u0930\u0935\u0923",
|
|
3652
|
+
"\u0927\u0928\u093F\u0937\u094D\u0920\u093E",
|
|
3653
|
+
"\u0936\u0924\u092D\u093F\u0937\u093E",
|
|
3654
|
+
"\u092A\u0942\u0930\u094D\u0935\u093E \u092D\u093E\u0926\u094D\u0930\u092A\u0926",
|
|
3655
|
+
"\u0909\u0924\u094D\u0924\u0930\u093E \u092D\u093E\u0926\u094D\u0930\u092A\u0926",
|
|
3656
|
+
"\u0930\u0947\u0935\u0924\u0940"
|
|
3657
|
+
],
|
|
3658
|
+
yogaNames: [
|
|
3659
|
+
"\u0935\u093F\u0937\u094D\u0915\u092E\u094D\u092D",
|
|
3660
|
+
"\u092A\u094D\u0930\u0940\u0924\u093F",
|
|
3661
|
+
"\u0906\u092F\u0941\u0937\u094D\u092E\u093E\u0928",
|
|
3662
|
+
"\u0938\u094C\u092D\u093E\u0917\u094D\u092F",
|
|
3663
|
+
"\u0936\u094B\u092D\u0928",
|
|
3664
|
+
"\u0905\u0924\u093F\u0917\u0902\u0921",
|
|
3665
|
+
"\u0938\u0941\u0915\u0930\u094D\u092E\u093E",
|
|
3666
|
+
"\u0927\u0943\u0924\u093F",
|
|
3667
|
+
"\u0936\u0942\u0932",
|
|
3668
|
+
"\u0917\u0902\u0921",
|
|
3669
|
+
"\u0935\u0943\u0926\u094D\u0927\u093F",
|
|
3670
|
+
"\u0927\u094D\u0930\u0941\u0935",
|
|
3671
|
+
"\u0935\u094D\u092F\u093E\u0918\u093E\u0924",
|
|
3672
|
+
"\u0939\u0930\u094D\u0937\u0923",
|
|
3673
|
+
"\u0935\u091C\u094D\u0930",
|
|
3674
|
+
"\u0938\u093F\u0926\u094D\u0927\u093F",
|
|
3675
|
+
"\u0935\u094D\u092F\u0924\u0940\u092A\u093E\u0924",
|
|
3676
|
+
"\u0935\u0930\u0940\u092F\u093E\u0928",
|
|
3677
|
+
"\u092A\u0930\u093F\u0918",
|
|
3678
|
+
"\u0936\u093F\u0935",
|
|
3679
|
+
"\u0938\u093F\u0926\u094D\u0927",
|
|
3680
|
+
"\u0938\u093E\u0927\u094D\u092F",
|
|
3681
|
+
"\u0936\u0941\u092D",
|
|
3682
|
+
"\u0936\u0941\u0915\u094D\u0932",
|
|
3683
|
+
"\u092C\u094D\u0930\u0939\u094D\u092E",
|
|
3684
|
+
"\u0907\u0902\u0926\u094D\u0930",
|
|
3685
|
+
"\u0935\u0948\u0927\u0943\u0924\u093F"
|
|
3686
|
+
],
|
|
3687
|
+
karanaNames: {
|
|
3688
|
+
movable: ["\u092C\u0935", "\u092C\u093E\u0932\u0935", "\u0915\u094C\u0932\u0935", "\u0924\u0948\u0924\u093F\u0932", "\u0917\u0930", "\u0935\u0923\u093F\u091C", "\u0935\u093F\u0937\u094D\u091F\u093F"],
|
|
3689
|
+
fixed: ["\u0915\u093F\u0902\u0938\u094D\u0924\u0941\u0918\u094D\u0928", "\u0936\u0915\u0941\u0928\u093F", "\u091A\u0924\u0941\u0937\u094D\u092A\u0926", "\u0928\u093E\u0917"]
|
|
3690
|
+
},
|
|
3691
|
+
varaNames: [
|
|
3692
|
+
{ name: "\u0930\u0935\u093F\u0935\u093E\u0930", short: "\u0930\u0935\u093F" },
|
|
3693
|
+
{ name: "\u0938\u094B\u092E\u0935\u093E\u0930", short: "\u0938\u094B\u092E" },
|
|
3694
|
+
{ name: "\u092E\u0902\u0917\u0932\u0935\u093E\u0930", short: "\u092E\u0902\u0917\u0932" },
|
|
3695
|
+
{ name: "\u092C\u0941\u0927\u0935\u093E\u0930", short: "\u092C\u0941\u0927" },
|
|
3696
|
+
{ name: "\u0917\u0941\u0930\u0941\u0935\u093E\u0930", short: "\u0917\u0941\u0930\u0941" },
|
|
3697
|
+
{ name: "\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930", short: "\u0936\u0941\u0915\u094D\u0930" },
|
|
3698
|
+
{ name: "\u0936\u0928\u093F\u0935\u093E\u0930", short: "\u0936\u0928\u093F" }
|
|
3699
|
+
],
|
|
3700
|
+
pakshaNames: { shukla: "\u0936\u0941\u0915\u094D\u0932", krishna: "\u0915\u0943\u0937\u094D\u0923" },
|
|
3701
|
+
masaNames: [
|
|
3702
|
+
"\u092E\u0947\u0937",
|
|
3703
|
+
"\u0935\u0943\u0937\u092D",
|
|
3704
|
+
"\u092E\u093F\u0925\u0941\u0928",
|
|
3705
|
+
"\u0915\u0930\u094D\u0915",
|
|
3706
|
+
"\u0938\u093F\u0902\u0939",
|
|
3707
|
+
"\u0915\u0928\u094D\u092F\u093E",
|
|
3708
|
+
"\u0924\u0941\u0932\u093E",
|
|
3709
|
+
"\u0935\u0943\u0936\u094D\u091A\u093F\u0915",
|
|
3710
|
+
"\u0927\u0928\u0941",
|
|
3711
|
+
"\u092E\u0915\u0930",
|
|
3712
|
+
"\u0915\u0941\u0902\u092D",
|
|
3713
|
+
"\u092E\u0940\u0928"
|
|
3714
|
+
],
|
|
3715
|
+
chandraMasaNames: [
|
|
3716
|
+
"\u091A\u0948\u0924\u094D\u0930",
|
|
3717
|
+
"\u0935\u0948\u0936\u093E\u0916",
|
|
3718
|
+
"\u091C\u094D\u092F\u0947\u0937\u094D\u0920",
|
|
3719
|
+
"\u0906\u0937\u093E\u0922\u093C",
|
|
3720
|
+
"\u0936\u094D\u0930\u093E\u0935\u0923",
|
|
3721
|
+
"\u092D\u093E\u0926\u094D\u0930\u092A\u0926",
|
|
3722
|
+
"\u0906\u0936\u094D\u0935\u093F\u0928",
|
|
3723
|
+
"\u0915\u093E\u0930\u094D\u0924\u093F\u0915",
|
|
3724
|
+
"\u092E\u093E\u0930\u094D\u0917\u0936\u0940\u0930\u094D\u0937",
|
|
3725
|
+
"\u092A\u094C\u0937",
|
|
3726
|
+
"\u092E\u093E\u0918",
|
|
3727
|
+
"\u092B\u093E\u0932\u094D\u0917\u0941\u0928"
|
|
3728
|
+
],
|
|
3729
|
+
choghadiyaNames: ["\u0909\u0926\u094D\u0935\u0947\u0917", "\u091A\u0930", "\u0932\u093E\u092D", "\u0905\u092E\u0943\u0924", "\u0915\u093E\u0932", "\u0936\u0941\u092D", "\u0930\u094B\u0917"],
|
|
3730
|
+
gowriNames: ["\u0909\u0926\u094D\u092F\u094B\u0917", "\u0905\u092E\u0943\u0924", "\u0930\u094B\u0917", "\u0932\u093E\u092D", "\u0936\u0941\u092D", "\u0915\u093E\u0932", "\u0927\u0928", "\u091A\u0932"],
|
|
3731
|
+
grahaNames: ["\u0938\u0942\u0930\u094D\u092F", "\u0936\u0941\u0915\u094D\u0930", "\u092C\u0941\u0927", "\u091A\u0902\u0926\u094D\u0930", "\u0936\u0928\u093F", "\u0917\u0941\u0930\u0941", "\u092E\u0902\u0917\u0932"],
|
|
3732
|
+
qualityNames: { auspicious: "\u0936\u0941\u092D", inauspicious: "\u0905\u0936\u0941\u092D", neutral: "\u0938\u093E\u092E\u093E\u0928\u094D\u092F" },
|
|
3733
|
+
specialYogaNames: {
|
|
3734
|
+
amrit_siddhi: "\u0905\u092E\u0943\u0924 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
3735
|
+
sarvartha_siddhi: "\u0938\u0930\u094D\u0935\u093E\u0930\u094D\u0925 \u0938\u093F\u0926\u094D\u0927\u093F \u092F\u094B\u0917",
|
|
3736
|
+
ravi_pushya: "\u0930\u0935\u093F \u092A\u0941\u0937\u094D\u092F \u092F\u094B\u0917",
|
|
3737
|
+
guru_pushya: "\u0917\u0941\u0930\u0941 \u092A\u0941\u0937\u094D\u092F \u092F\u094B\u0917"
|
|
3738
|
+
},
|
|
3739
|
+
festivalNames: {
|
|
3740
|
+
ugadi: "\u0909\u0917\u093E\u0926\u0940",
|
|
3741
|
+
rama_navami: "\u0930\u093E\u092E \u0928\u0935\u092E\u0940",
|
|
3742
|
+
hanuman_jayanti: "\u0939\u0928\u0941\u092E\u093E\u0928 \u091C\u092F\u0902\u0924\u0940",
|
|
3743
|
+
akshaya_tritiya: "\u0905\u0915\u094D\u0937\u092F \u0924\u0943\u0924\u0940\u092F\u093E",
|
|
3744
|
+
guru_purnima: "\u0917\u0941\u0930\u0941 \u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E",
|
|
3745
|
+
nag_panchami: "\u0928\u093E\u0917 \u092A\u0902\u091A\u092E\u0940",
|
|
3746
|
+
raksha_bandhan: "\u0930\u0915\u094D\u0937\u093E \u092C\u0902\u0927\u0928",
|
|
3747
|
+
krishna_janmashtami: "\u0915\u0943\u0937\u094D\u0923 \u091C\u0928\u094D\u092E\u093E\u0937\u094D\u091F\u092E\u0940",
|
|
3748
|
+
ganesh_chaturthi: "\u0917\u0923\u0947\u0936 \u091A\u0924\u0941\u0930\u094D\u0925\u0940",
|
|
3749
|
+
anant_chaturdashi: "\u0905\u0928\u0902\u0924 \u091A\u0924\u0941\u0930\u094D\u0926\u0936\u0940",
|
|
3750
|
+
navaratri: "\u0936\u0930\u0926 \u0928\u0935\u0930\u093E\u0924\u094D\u0930\u093F",
|
|
3751
|
+
durga_ashtami: "\u0926\u0941\u0930\u094D\u0917\u093E \u0905\u0937\u094D\u091F\u092E\u0940",
|
|
3752
|
+
maha_navami: "\u092E\u0939\u093E \u0928\u0935\u092E\u0940",
|
|
3753
|
+
dussehra: "\u0926\u0936\u0939\u0930\u093E",
|
|
3754
|
+
sharad_purnima: "\u0936\u0930\u0926 \u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E",
|
|
3755
|
+
karva_chauth: "\u0915\u0930\u0935\u093E \u091A\u094C\u0925",
|
|
3756
|
+
dhanteras: "\u0927\u0928\u0924\u0947\u0930\u0938",
|
|
3757
|
+
narak_chaturdashi: "\u0928\u0930\u0915 \u091A\u0924\u0941\u0930\u094D\u0926\u0936\u0940",
|
|
3758
|
+
diwali: "\u0926\u093F\u0935\u093E\u0932\u0940",
|
|
3759
|
+
vasant_panchami: "\u0935\u0938\u0902\u0924 \u092A\u0902\u091A\u092E\u0940",
|
|
3760
|
+
maha_shivaratri: "\u092E\u0939\u093E \u0936\u093F\u0935\u0930\u093E\u0924\u094D\u0930\u093F",
|
|
3761
|
+
holi: "\u0939\u094B\u0932\u0940",
|
|
3762
|
+
mahalaya_amavasya: "\u092E\u0939\u093E\u0932\u092F \u0905\u092E\u093E\u0935\u0938\u094D\u092F\u093E",
|
|
3763
|
+
kartika_purnima: "\u0915\u093E\u0930\u094D\u0924\u093F\u0915 \u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E"
|
|
3764
|
+
},
|
|
3765
|
+
misc: {
|
|
3766
|
+
purnima: "\u092A\u0942\u0930\u094D\u0923\u093F\u092E\u093E",
|
|
3767
|
+
amavasya: "\u0905\u092E\u093E\u0935\u0938\u094D\u092F\u093E",
|
|
3768
|
+
adhika: "\u0905\u0927\u093F\u0915",
|
|
3769
|
+
ekadashi: "\u090F\u0915\u093E\u0926\u0936\u0940",
|
|
3770
|
+
pradosha: "\u092A\u094D\u0930\u0926\u094B\u0937 \u0935\u094D\u0930\u0924",
|
|
3771
|
+
sankranti: "\u0938\u0902\u0915\u094D\u0930\u093E\u0902\u0924\u093F"
|
|
3772
|
+
}
|
|
3773
|
+
};
|
|
3621
3774
|
|
|
3622
3775
|
// src/i18n/resolver.ts
|
|
3623
3776
|
var TRANSLATIONS = { en, sa, hi };
|
|
3624
3777
|
function getTranslations(lang) {
|
|
3625
3778
|
return TRANSLATIONS[lang] ?? en;
|
|
3626
3779
|
}
|
|
3780
|
+
function resolvePakshaName(index, lang) {
|
|
3781
|
+
const t = getTranslations(lang);
|
|
3782
|
+
return index < 15 ? t.pakshaNames.shukla : t.pakshaNames.krishna;
|
|
3783
|
+
}
|
|
3627
3784
|
function resolveTithiName(index, lang) {
|
|
3628
3785
|
const t = getTranslations(lang);
|
|
3629
3786
|
if (index === 14) return t.misc.purnima;
|
|
@@ -3667,10 +3824,12 @@ function getInstantPanchang(date, location, options) {
|
|
|
3667
3824
|
const siderealMoon = getMoon(date);
|
|
3668
3825
|
const siderealSun = getSun(date);
|
|
3669
3826
|
const ayanamsaValue = computeAyanamsa(date, ayanamsaType);
|
|
3827
|
+
const tithiIdx = getTithiIndexFromLons(siderealMoon, siderealSun);
|
|
3670
3828
|
const tithi = computeTithiFromLongitudes(
|
|
3671
3829
|
siderealMoon,
|
|
3672
3830
|
siderealSun,
|
|
3673
|
-
resolveTithiName(
|
|
3831
|
+
resolveTithiName(tithiIdx, lang),
|
|
3832
|
+
resolvePakshaName(tithiIdx, lang)
|
|
3674
3833
|
);
|
|
3675
3834
|
const nakshatra = computeNakshatraFromLongitude(
|
|
3676
3835
|
siderealMoon,
|
|
@@ -3749,7 +3908,8 @@ function getInstantPanchang(date, location, options) {
|
|
|
3749
3908
|
chandramasa.isAdhika,
|
|
3750
3909
|
vara.index,
|
|
3751
3910
|
siderealSun,
|
|
3752
|
-
(key) => t.festivalNames[key] ?? t.misc[key] ?? key
|
|
3911
|
+
(key) => t.festivalNames[key] ?? t.misc[key] ?? key,
|
|
3912
|
+
(idx) => resolveMasaName(idx, lang)
|
|
3753
3913
|
);
|
|
3754
3914
|
return {
|
|
3755
3915
|
timestamp: date,
|
|
@@ -3789,10 +3949,12 @@ function getDailyPanchang(date, location, options) {
|
|
|
3789
3949
|
const siderealMoonAtSunrise = getMoon(sunriseUtc);
|
|
3790
3950
|
const siderealSunAtSunrise = getSun(sunriseUtc);
|
|
3791
3951
|
const ayanamsaValue = computeAyanamsa(sunriseUtc, ayanamsaType);
|
|
3952
|
+
const tithiIdxAtSunrise = getTithiIndexFromLons(siderealMoonAtSunrise, siderealSunAtSunrise);
|
|
3792
3953
|
const tithiAtSunrise = computeTithiFromLongitudes(
|
|
3793
3954
|
siderealMoonAtSunrise,
|
|
3794
3955
|
siderealSunAtSunrise,
|
|
3795
|
-
resolveTithiName(
|
|
3956
|
+
resolveTithiName(tithiIdxAtSunrise, lang),
|
|
3957
|
+
resolvePakshaName(tithiIdxAtSunrise, lang)
|
|
3796
3958
|
);
|
|
3797
3959
|
const nakshatraAtSunrise = computeNakshatraFromLongitude(
|
|
3798
3960
|
siderealMoonAtSunrise,
|
|
@@ -3809,7 +3971,7 @@ function getDailyPanchang(date, location, options) {
|
|
|
3809
3971
|
resolveKaranaName(getKaranaIndex(siderealMoonAtSunrise, siderealSunAtSunrise), lang)
|
|
3810
3972
|
);
|
|
3811
3973
|
const vara = computeVara(sunriseUtc, sunriseUtc, getTranslations(lang).varaNames);
|
|
3812
|
-
const masa = computeMasa(siderealSunAtSunrise);
|
|
3974
|
+
const masa = computeMasa(siderealSunAtSunrise, (idx) => resolveMasaName(idx, lang));
|
|
3813
3975
|
const chandramasa = computeChandraMasa(
|
|
3814
3976
|
siderealSunAtSunrise,
|
|
3815
3977
|
siderealMoonAtSunrise,
|
|
@@ -3825,12 +3987,14 @@ function getDailyPanchang(date, location, options) {
|
|
|
3825
3987
|
(idx) => resolveNakshatraName(idx, lang)
|
|
3826
3988
|
);
|
|
3827
3989
|
const brahmaMuhurta = computeBrahmaMuhurta(sunriseUtc, sunsetUtc);
|
|
3990
|
+
const qualityNameFn = (q) => getTranslations(lang).qualityNames[q];
|
|
3828
3991
|
const choghadiya = computeChoghadiya(
|
|
3829
3992
|
sunriseUtc,
|
|
3830
3993
|
sunsetUtc,
|
|
3831
3994
|
nextSunriseUtc,
|
|
3832
3995
|
vara.index,
|
|
3833
|
-
(idx) => getTranslations(lang).choghadiyaNames[idx]
|
|
3996
|
+
(idx) => getTranslations(lang).choghadiyaNames[idx],
|
|
3997
|
+
qualityNameFn
|
|
3834
3998
|
);
|
|
3835
3999
|
const hora = computeHora(
|
|
3836
4000
|
sunriseUtc,
|
|
@@ -3844,7 +4008,8 @@ function getDailyPanchang(date, location, options) {
|
|
|
3844
4008
|
sunsetUtc,
|
|
3845
4009
|
nextSunriseUtc,
|
|
3846
4010
|
vara.index,
|
|
3847
|
-
(idx) => getTranslations(lang).gowriNames[idx]
|
|
4011
|
+
(idx) => getTranslations(lang).gowriNames[idx],
|
|
4012
|
+
qualityNameFn
|
|
3848
4013
|
);
|
|
3849
4014
|
const moonriseUtc = getMoonrise(localMidnightUtc, location);
|
|
3850
4015
|
const moonsetUtc = getMoonset(localMidnightUtc, location);
|
|
@@ -3864,7 +4029,8 @@ function getDailyPanchang(date, location, options) {
|
|
|
3864
4029
|
chandramasa.isAdhika,
|
|
3865
4030
|
vara.index,
|
|
3866
4031
|
siderealSunAtSunrise,
|
|
3867
|
-
(key) => t.festivalNames[key] ?? t.misc[key] ?? key
|
|
4032
|
+
(key) => t.festivalNames[key] ?? t.misc[key] ?? key,
|
|
4033
|
+
(idx) => resolveMasaName(idx, lang)
|
|
3868
4034
|
);
|
|
3869
4035
|
let tithis;
|
|
3870
4036
|
let nakshatras;
|
|
@@ -3878,7 +4044,8 @@ function getDailyPanchang(date, location, options) {
|
|
|
3878
4044
|
(d) => getTithiIndexAtTime(d, getMoon, getSun),
|
|
3879
4045
|
(d) => {
|
|
3880
4046
|
const moon = getMoon(d), sun = getSun(d);
|
|
3881
|
-
|
|
4047
|
+
const idx = getTithiIndexFromLons(moon, sun);
|
|
4048
|
+
return computeTithiFromLongitudes(moon, sun, resolveTithiName(idx, lang), resolvePakshaName(idx, lang));
|
|
3882
4049
|
},
|
|
3883
4050
|
30,
|
|
3884
4051
|
36,
|
package/package.json
CHANGED