UNPKG

astrology-insights

Version:

Comprehensive Vedic astrology engine for Node.js — Panchang, birth charts (Kundli), Vimshottari Dasha, divisional charts, dosha analysis, and planetary remedies. Swiss Ephemeris precision, validated against Drik Panchang.

77 lines (76 loc) 2.81 kB
"use strict"; /** * House Calculation * Assign signs to houses and planets to houses. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.populateHousePlanets = exports.assignPlanetsToHouses = exports.calculateHouses = void 0; const constants_1 = require("./constants"); /** * Calculate the 12 houses given the lagna sign and house system. * * @param lagnaSignNumber - The sign number of the ascendant (1-12) * @param houseSystem - House system type * @param cusps - Optional sidereal cusp longitudes (index 1-12) * @returns Array of 12 HouseInfo */ function calculateHouses(lagnaSignNumber, houseSystem, cusps) { const houses = []; for (let h = 1; h <= 12; h++) { // Whole sign: house N has sign = (lagnaSign - 1 + N - 1) % 12 + 1 const signNumber = ((lagnaSignNumber - 1 + h - 1) % 12) + 1; const cuspDegree = cusps && cusps[h] !== undefined ? cusps[h] : (signNumber - 1) * 30; houses.push({ number: h, signName: constants_1.SIGN_NAMES[signNumber] || 'Unknown', signNumber, cuspDegree: Math.round(cuspDegree * 100) / 100, planets: [], }); } return houses; } exports.calculateHouses = calculateHouses; /** * Assign planets to houses based on their sign positions. * For whole-sign: house = (planetSign - lagnaSign + 12) % 12 + 1 * * @returns Record mapping planet name to house number (1-12) */ function assignPlanetsToHouses(planets, lagnaSignNumber, houseSystem) { const assignment = {}; for (const planet of planets) { if (houseSystem === 'whole_sign' || houseSystem === 'equal') { // Whole-sign logic: planet's sign determines the house const houseNum = ((planet.signNumber - lagnaSignNumber + 12) % 12) + 1; assignment[planet.name] = houseNum; } else { // Placidus: determine house by cusp ranges (simplified — use whole-sign fallback) const houseNum = ((planet.signNumber - lagnaSignNumber + 12) % 12) + 1; assignment[planet.name] = houseNum; } } return assignment; } exports.assignPlanetsToHouses = assignPlanetsToHouses; /** * Populate the houses' planet arrays using the assignment map. */ function populateHousePlanets(houses, planets, assignment) { // Clear existing planet arrays for (const h of houses) { h.planets = []; } for (const planet of planets) { const houseNum = assignment[planet.name]; if (houseNum >= 1 && houseNum <= 12) { const house = houses.find(h => h.number === houseNum); if (house) { house.planets.push(planet.name); } } } return houses; } exports.populateHousePlanets = populateHousePlanets;