UNPKG

@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
"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