UNPKG

@nrweb/astro-calc

Version:

Comprehensive astrological calculations using Swiss Ephemeris and astronomy-engine for positions, aspects, houses, lots, and scoring metrics

224 lines 6.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getZodiacSign = getZodiacSign; exports.getDignity = getDignity; exports.decimalToDegreesMinutes = decimalToDegreesMinutes; exports.getDecanRuler = getDecanRuler; exports.getBoundRuler = getBoundRuler; exports.getSolarInfluence = getSolarInfluence; const astronomy_engine_1 = require("astronomy-engine"); const constants_1 = require("./constants"); const ZODIAC_SIGNS = [ "Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces", ]; const DIGNITIES = { [astronomy_engine_1.Body.Sun]: { Leo: "Rulership", Aries: "Exaltation", Aquarius: "Detriment", Libra: "Fall", }, [astronomy_engine_1.Body.Moon]: { Cancer: "Rulership", Taurus: "Exaltation", Capricorn: "Detriment", Scorpio: "Fall", }, [astronomy_engine_1.Body.Mercury]: { Gemini: "Rulership", Virgo: "Rulership and Exaltation", Sagittarius: "Detriment", Pisces: "Detriment and Fall", }, [astronomy_engine_1.Body.Venus]: { Taurus: "Rulership", Libra: "Rulership", Pisces: "Exaltation", Aries: "Detriment", Scorpio: "Detriment", Virgo: "Fall", }, [astronomy_engine_1.Body.Mars]: { Aries: "Rulership", Scorpio: "Rulership", Capricorn: "Exaltation", Taurus: "Detriment", Libra: "Detriment", Cancer: "Fall", }, [astronomy_engine_1.Body.Jupiter]: { Sagittarius: "Rulership", Pisces: "Rulership", Cancer: "Exaltation", Gemini: "Detriment", Virgo: "Detriment", Capricorn: "Fall", }, [astronomy_engine_1.Body.Saturn]: { Capricorn: "Rulership", Aquarius: "Rulership", Libra: "Exaltation", Cancer: "Detriment", Leo: "Detriment", Aries: "Fall", }, }; function getZodiacSign(longitude) { const signs = [ "Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces", ]; const signIndex = Math.floor(longitude / 30); return signs[signIndex]; } function getDignity(planet, sign) { const dignities = { Sun: { rulership: "Leo", exaltation: "Aries", detriment: "Aquarius", fall: "Libra", }, Moon: { rulership: "Cancer", exaltation: "Taurus", detriment: "Capricorn", fall: "Scorpio", }, Mercury: { rulership: ["Gemini", "Virgo"], exaltation: "Virgo", detriment: ["Sagittarius", "Pisces"], fall: "Pisces", }, Venus: { rulership: ["Taurus", "Libra"], exaltation: "Pisces", detriment: ["Aries", "Scorpio"], fall: "Virgo", }, Mars: { rulership: ["Aries", "Scorpio"], exaltation: "Capricorn", detriment: ["Taurus", "Libra"], fall: "Cancer", }, Jupiter: { rulership: ["Sagittarius", "Pisces"], exaltation: "Cancer", detriment: ["Gemini", "Virgo"], fall: "Capricorn", }, Saturn: { rulership: ["Capricorn", "Aquarius"], exaltation: "Libra", detriment: ["Cancer", "Leo"], fall: "Aries", }, }; const planetDignities = dignities[planet]; if (!planetDignities) return "None"; if (planetDignities.rulership === sign) return "Rulership"; if (Array.isArray(planetDignities.rulership) && planetDignities.rulership.includes(sign)) return "Rulership"; if (planetDignities.exaltation === sign) return "Exaltation"; if (planetDignities.detriment === sign) return "Detriment"; if (Array.isArray(planetDignities.detriment) && planetDignities.detriment.includes(sign)) return "Detriment"; if (planetDignities.fall === sign) return "Fall"; return "Peregrine"; } function decimalToDegreesMinutes(decimal) { const degrees = Math.floor(decimal); const minutes = Math.round((decimal - degrees) * 60); // Handle edge case where minutes round to 60 if (minutes === 60) { return `${degrees + 1}°00'`; } return `${degrees}°${minutes.toString().padStart(2, "0")}'`; } function getDecanRuler(sign, degreesInSign) { const decans = constants_1.DECANS[sign]; if (!decans) return "Unknown"; // Each decan is 10 degrees (0-9, 10-19, 20-29) const decanIndex = Math.floor(degreesInSign / 10); return decans[decanIndex] || "Unknown"; } function getBoundRuler(sign, degreesInSign) { const bounds = constants_1.BOUNDS[sign]; if (!bounds) return "Unknown"; // Find the bound that contains the current degree for (const bound of bounds) { if (degreesInSign >= bound.start && degreesInSign <= bound.end) { return bound.planet; } } return "Unknown"; } function getSolarInfluence(planetName, planetLongitude, sunLongitude, dignity, boundRuler) { // Only apply to traditional planets (excluding Sun, Moon, and lunar nodes) const traditionalPlanets = [ "Mercury", "Venus", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", ]; if (!traditionalPlanets.includes(planetName)) { return undefined; } // Calculate angular distance between planet and Sun let distance = Math.abs(planetLongitude - sunLongitude); // Handle cases where the distance crosses 0°/360° if (distance > 180) { distance = 360 - distance; } // Cazimi: within 0.28 degrees of the Sun if (distance <= 0.28) { return "cazimi"; } // Within 15 degrees of the Sun if (distance <= 15) { // Check for mitigating factors for chariot const hasMitigatingFactors = dignity === "Rulership" || dignity === "Exaltation" || boundRuler === planetName; return hasMitigatingFactors ? "chariot" : "combust"; } // Greater than 15 degrees from the Sun - no solar influence return undefined; } //# sourceMappingURL=utils.js.map