@ishubhamx/panchangam-js
Version:
Enhanced Indian Panchangam (Hindu Calendar) library with comprehensive Vedic features including Muhurta calculations, planetary positions, Rashi placements, and auspicious/inauspicious time calculations
93 lines • 3.92 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getKundli = getKundli;
const astronomy_engine_1 = require("astronomy-engine");
const ayanamsa_1 = require("../core/ayanamsa");
const calculations_1 = require("../core/calculations");
const constants_1 = require("../core/constants");
const houses_1 = require("./houses");
const vargas_1 = require("./vargas");
/**
* Generates a Janam Kundli (Birth Chart) for a given date and location.
*
* @param date The Date object of birth (ensure timezone is handled correctly by caller or passed in UTC)
* @param observer The Observer object (Location)
* @param config Configuration options (optional)
*/
function getKundli(date, observer, config = {}) {
const ayanamsa = (0, ayanamsa_1.getAyanamsa)(date);
// 1. Calculate Ascendant (Lagna)
const lagnaLon = (0, calculations_1.getUdayaLagna)(date, observer, ayanamsa);
const lagnaRashiIndex = Math.floor(lagnaLon / 30);
const lagnaNakshatraIndex = (0, calculations_1.getNakshatra)(lagnaLon);
const lagnaPada = (0, calculations_1.getNakshatraPada)(lagnaLon);
const ascendant = {
rashi: lagnaRashiIndex,
rashiName: constants_1.rashiNames[lagnaRashiIndex],
longitude: lagnaLon,
nakshatra: constants_1.nakshatraNames[lagnaNakshatraIndex],
pada: lagnaPada
};
// 2. Calculate Planets (Sidereal)
const planets = {};
const bodies = [
astronomy_engine_1.Body.Sun, astronomy_engine_1.Body.Moon, astronomy_engine_1.Body.Mercury, astronomy_engine_1.Body.Venus, astronomy_engine_1.Body.Mars, astronomy_engine_1.Body.Jupiter, astronomy_engine_1.Body.Saturn,
astronomy_engine_1.Body.Uranus, astronomy_engine_1.Body.Neptune, astronomy_engine_1.Body.Pluto
];
const bodyNames = [
"Sun", "Moon", "Mercury", "Venus", "Mars", "Jupiter", "Saturn",
"Uranus", "Neptune", "Pluto"
];
bodies.forEach((body, idx) => {
const name = bodyNames[idx];
planets[name] = (0, calculations_1.getPlanetaryPosition)(body, date, ayanamsa);
});
// Nodes
const rahuPos = (0, calculations_1.getRahuPosition)(date, ayanamsa);
planets["Rahu"] = rahuPos;
planets["Ketu"] = (0, calculations_1.getKetuPosition)(rahuPos);
// 3. Calculate Houses
// Default to 'whole_sign' if not specified
// Explicitly cast or handle default for compiler safety
const houseSystem = (config.houseSystem === 'equal_house') ? 'equal_house' : 'whole_sign';
const houses = (0, houses_1.getHouses)(lagnaLon, houseSystem);
// 4. Map Planets to Houses
// Iterate through planets and find which house they fall into
for (const [pName, pData] of Object.entries(planets)) {
const pLon = pData.longitude;
// Find the house where startLon <= pLon < endLon
// Handle wrapping 360 case carefully
const house = houses.find((h) => {
// Normal case: Start < End (e.g., 30 to 60)
if (h.startLongitude < h.endLongitude) {
return pLon >= h.startLongitude && pLon < h.endLongitude;
}
// Wrap case: Start > End (e.g., 330 to 0/360 -> Pisces)
else {
return pLon >= h.startLongitude || pLon < h.endLongitude;
}
});
if (house) {
house.planets.push(pName);
}
}
// 5. Calculate Dasha
const moonLon = planets["Moon"].longitude;
const dasha = (0, calculations_1.calculateVimshottariDasha)(moonLon, date);
// 6. Calculate Vargas (D1-D12)
const vargas = (0, vargas_1.getAllVargas)(lagnaLon, planets);
return {
birthDetails: {
date,
lat: observer.latitude,
lon: observer.longitude,
timezone: 0
},
ascendant,
planets,
houses,
dasha,
vargas
};
}
//# sourceMappingURL=index.js.map