UNPKG

@bidyashish/panchang

Version:

Complete Hindu Panchanga calculator with Tithi, Nakshatra, Yoga, Karana, Vara calculations and Swiss Ephemeris precision

40 lines (35 loc) 23 kB
"use strict";var E=Object.create;var v=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var B=(u,a)=>{for(var e in a)v(u,e,{get:a[e],enumerable:!0})},I=(u,a,e,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of $(a))!V.call(u,t)&&t!==e&&v(u,t,{get:()=>a[t],enumerable:!(n=K(a,t))||n.enumerable});return u};var H=(u,a,e)=>(e=u!=null?E(R(u)):{},I(a||!u||!u.__esModule?v(e,"default",{value:u,enumerable:!0}):e,u)),O=u=>I(v({},"__esModule",{value:!0}),u);var _={};B(_,{AstronomicalCalculator:()=>D,Ephemeris:()=>M,NAKSHATRAS:()=>C,Panchanga:()=>w,Planetary:()=>P,RASHIS:()=>L,default:()=>G,getAyanamsa:()=>J,getCurrentPlanets:()=>z,getPanchanga:()=>U,getPanchangaReport:()=>F,getSpecificAyanamsa:()=>j});module.exports=O(_);var d=H(require("swisseph"));function x(u){return u.toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function g(u){let a=u%360;return a<0&&(a+=360),a}var L=[{name:"Mesha",element:"Fire",ruler:"Mars"},{name:"Vrishabha",element:"Earth",ruler:"Venus"},{name:"Mithuna",element:"Air",ruler:"Mercury"},{name:"Karka",element:"Water",ruler:"Moon"},{name:"Simha",element:"Fire",ruler:"Sun"},{name:"Kanya",element:"Earth",ruler:"Mercury"},{name:"Tula",element:"Air",ruler:"Venus"},{name:"Vrishchika",element:"Water",ruler:"Mars"},{name:"Dhanu",element:"Fire",ruler:"Jupiter"},{name:"Makara",element:"Earth",ruler:"Saturn"},{name:"Kumbha",element:"Air",ruler:"Saturn"},{name:"Meena",element:"Water",ruler:"Jupiter"}],C=[{name:"Ashwini",ruler:"Ketu",deity:"Ashwini Kumaras",symbol:"Horse's head"},{name:"Bharani",ruler:"Venus",deity:"Yama",symbol:"Yoni"},{name:"Krittika",ruler:"Sun",deity:"Agni",symbol:"Razor/flame"},{name:"Rohini",ruler:"Moon",deity:"Brahma",symbol:"Cart/chariot"},{name:"Mrigashira",ruler:"Mars",deity:"Soma",symbol:"Deer's head"},{name:"Ardra",ruler:"Rahu",deity:"Rudra",symbol:"Teardrop"},{name:"Punarvasu",ruler:"Jupiter",deity:"Aditi",symbol:"Quiver of arrows"},{name:"Pushya",ruler:"Saturn",deity:"Brihaspati",symbol:"Cow's udder"},{name:"Ashlesha",ruler:"Mercury",deity:"Nagas",symbol:"Serpent"},{name:"Magha",ruler:"Ketu",deity:"Pitrs",symbol:"Throne"},{name:"Purva Phalguni",ruler:"Venus",deity:"Bhaga",symbol:"Hammock"},{name:"Uttara Phalguni",ruler:"Sun",deity:"Aryaman",symbol:"Bed"},{name:"Hasta",ruler:"Moon",deity:"Savitar",symbol:"Hand"},{name:"Chitra",ruler:"Mars",deity:"Vishvakarma",symbol:"Pearl"},{name:"Swati",ruler:"Rahu",deity:"Vayu",symbol:"Sword"},{name:"Vishakha",ruler:"Jupiter",deity:"Indragni",symbol:"Triumphal arch"},{name:"Anuradha",ruler:"Saturn",deity:"Mitra",symbol:"Lotus"},{name:"Jyeshtha",ruler:"Mercury",deity:"Indra",symbol:"Earring"},{name:"Mula",ruler:"Ketu",deity:"Nirriti",symbol:"Bunch of roots"},{name:"Purva Ashadha",ruler:"Venus",deity:"Apah",symbol:"Fan"},{name:"Uttara Ashadha",ruler:"Sun",deity:"Vishvedevas",symbol:"Elephant tusk"},{name:"Shravana",ruler:"Moon",deity:"Vishnu",symbol:"Ear"},{name:"Dhanishtha",ruler:"Mars",deity:"Vasus",symbol:"Drum"},{name:"Shatabhisha",ruler:"Rahu",deity:"Varuna",symbol:"Circle"},{name:"Purva Bhadrapada",ruler:"Jupiter",deity:"Ajaikapat",symbol:"Front legs of bed"},{name:"Uttara Bhadrapada",ruler:"Saturn",deity:"Ahirbudhnya",symbol:"Back legs of bed"},{name:"Revati",ruler:"Mercury",deity:"Pushan",symbol:"Fish"}],P=class{constructor(){this.orbitalData={Mercury:{perihelion:.307,aphelion:.467,eccentricity:.2056,semiMajorAxis:.387,orbitalPeriod:87.97,inclination:7.005,longitudeOfAscendingNode:48.331,argumentOfPeriapsis:29.124},Venus:{perihelion:.718,aphelion:.728,eccentricity:.0067,semiMajorAxis:.723,orbitalPeriod:224.7,inclination:3.395,longitudeOfAscendingNode:76.68,argumentOfPeriapsis:54.884},Earth:{perihelion:.983,aphelion:1.017,eccentricity:.0167,semiMajorAxis:1,orbitalPeriod:365.26,inclination:0,longitudeOfAscendingNode:0,argumentOfPeriapsis:114.208},Mars:{perihelion:1.381,aphelion:1.666,eccentricity:.0935,semiMajorAxis:1.524,orbitalPeriod:686.98,inclination:1.85,longitudeOfAscendingNode:49.558,argumentOfPeriapsis:286.502},Jupiter:{perihelion:4.95,aphelion:5.455,eccentricity:.0489,semiMajorAxis:5.203,orbitalPeriod:4332.59,inclination:1.304,longitudeOfAscendingNode:100.464,argumentOfPeriapsis:273.867},Saturn:{perihelion:9.02,aphelion:10.054,eccentricity:.0565,semiMajorAxis:9.537,orbitalPeriod:10759.22,inclination:2.489,longitudeOfAscendingNode:113.665,argumentOfPeriapsis:339.392},Uranus:{perihelion:18.324,aphelion:20.11,eccentricity:.0457,semiMajorAxis:19.217,orbitalPeriod:30688.5,inclination:.773,longitudeOfAscendingNode:74.006,argumentOfPeriapsis:96.998},Neptune:{perihelion:29.82,aphelion:30.33,eccentricity:.0113,semiMajorAxis:30.075,orbitalPeriod:60182,inclination:1.77,longitudeOfAscendingNode:131.784,argumentOfPeriapsis:276.336}}}calculateOrbit(a,e){let n=this.orbitalData[a];if(!n)return{perihelion:1,aphelion:1,eccentricity:0};let t=(e.getTime()-new Date("2000-01-01").getTime())/(1e3*60*60*24),r=Math.sin(t/365.25)*.001;return{perihelion:n.perihelion*(1+r),aphelion:n.aphelion*(1+r),eccentricity:n.eccentricity*(1+r*.1)}}calculateTithi(a,e){let n=["Pratipada","Dwitiya","Tritiya","Chaturthi","Panchami","Shashthi","Saptami","Ashtami","Navami","Dashami","Ekadashi","Dwadashi","Trayodashi","Chaturdashi","Purnima/Amavasya"],t=g(e-a),r=12,i=Math.floor(t/r)+1,o=t%r/r*100,l,m,c;return i<=15?(m=!0,l=i,l===15?c="Purnima":c=n[l-1]):(m=!1,l=i-15,l===15?c="Amavasya":c=n[l-1]),{tithi:l,name:c,percentage:o,isWaxing:m}}calculateYoga(a,e){let n=["Vishkumbha","Preeti","Ayushman","Saubhagya","Shobhana","Atiganda","Sukarman","Dhriti","Shoola","Ganda","Vriddhi","Dhruva","Vyaghata","Harshana","Vajra","Siddhi","Vyatipata","Variyan","Parigha","Shiva","Siddha","Sadhya","Shubha","Shukla","Brahma","Indra","Vaidhriti"],t=g(a+e),r=360/27,i=Math.floor(t/r)+1,s=Math.max(1,Math.min(27,i));return{yoga:s,name:n[s-1]||"Unknown"}}calculateKarana(a,e){let n=["Bava","Balava","Kaulava","Taitila","Gara","Vanija","Vishti","Shakuni","Chatushpada","Naga","Kimstughna"],t=g(e-a),i=Math.floor(t/6)+1,s,o;return i<=57?(s=(i-1)%7,o=i):i<=60?(s=7+(i-58),o=i):(s=(i-1)%7,o=(i-1)%60+1),s=Math.min(Math.max(0,s),n.length-1),{karana:o,name:n[s]}}getOrbitalPeriod(a){let e=this.orbitalData[a];return e?e.orbitalPeriod:365.25}getSemiMajorAxis(a){let e=this.orbitalData[a];return e?e.semiMajorAxis:1}getEccentricity(a){let e=this.orbitalData[a];return e?e.eccentricity:0}getInclination(a){let e=this.orbitalData[a];return e?e.inclination:0}calculateMeanAnomaly(a,e){let n=this.orbitalData[a];if(!n)return 0;let t=(e.getTime()-new Date("2000-01-01").getTime())/(1e3*60*60*24),r=360/n.orbitalPeriod;return g(r*t)}calculateTrueAnomaly(a,e){let n=this.calculateMeanAnomaly(a,e),t=this.getEccentricity(a),r=n*Math.PI/180,i=r+2*t*Math.sin(r);return g(i*180/Math.PI)}calculateRashi(a){let e=Math.floor(a/30),n=a%30,t=L[e];return{rashi:e+1,name:t.name,element:t.element,ruler:t.ruler,degree:n}}calculateNakshatra(a){let e=13.333333333333334,n=Math.floor(a/e),t=a%e,r=Math.floor(t/(e/4))+1,i=C[n];return{nakshatra:n+1,name:i.name,pada:r,ruler:i.ruler,deity:i.deity,symbol:i.symbol,degree:t}}};var M=class{constructor(a){this.planetMap={Sun:0,Moon:1,Mercury:2,Venus:3,Mars:4,Jupiter:5,Saturn:6,Uranus:7,Neptune:8,Pluto:9,Rahu:11,Ketu:-1};this.ephemerisPath="";this.ephemerisPath=a||"/usr/share/libswe/ephe",this.initializeSwissEph()}initializeSwissEph(){try{d.swe_set_ephe_path(this.ephemerisPath),console.log(`Swiss Ephemeris initialized with path: ${this.ephemerisPath}`)}catch{console.warn("Could not set ephemeris path, using default built-in data")}}calculatePosition(a,e){let n=this.dateToJulian(a),t=this.getPlanetId(e);try{let r;return e==="Ketu"?(r=d.swe_calc_ut(n,11,0),{longitude:g((r.longitude||r[0]||0)+180),latitude:-(r.latitude||r[1]||0)}):(r=d.swe_calc_ut(n,t,0),{longitude:g(r.longitude||r[0]||0),latitude:r.latitude||r[1]||0})}catch{return console.warn(`Swiss Ephemeris calculation failed for ${e}, using fallback`),this.getFallbackPosition(e,a)}}calculateSiderealPosition(a,e,n){let t=n||this.calculateLahiriAyanamsa(a),r=this.calculatePosition(a,e);return{longitude:g(r.longitude-t),latitude:r.latitude}}calculateLahiriAyanamsa(a){try{let e=this.dateToJulian(a);return d.swe_set_sid_mode(1,0,0),d.swe_get_ayanamsa_ut(e)||this.getFallbackLahiriAyanamsa(a)}catch{return this.getFallbackLahiriAyanamsa(a)}}getFallbackLahiriAyanamsa(a){let e=a.getFullYear(),n=a.getMonth()+1,t=a.getDate(),i=(e+(n-1)/12+(t-1)/365.25-1900)/100;return 22.46+1.3915817*i-.0130125*i*i-333e-7*i*i*i}getAyanamsa(a){let e=this.dateToJulian(a),n=[{id:0,name:"Fagan/Bradley",description:"Fagan/Bradley (Western Sidereal)"},{id:1,name:"Lahiri",description:"Lahiri (Chitrapaksha) - Official Indian Government"},{id:2,name:"De Luce",description:"De Luce ayanamsa"},{id:3,name:"Raman",description:"B.V. Raman ayanamsa"},{id:4,name:"Ushashashi",description:"Ushashashi ayanamsa"},{id:5,name:"Krishnamurti",description:"Krishnamurti ayanamsa (KP System)"},{id:6,name:"Djwhal Khul",description:"Djwhal Khul ayanamsa"},{id:7,name:"Yukteshwar",description:"Sri Yukteshwar ayanamsa"},{id:8,name:"J.N. Bhasin",description:"J.N. Bhasin ayanamsa"},{id:9,name:"Babylonian (Kugler 1)",description:"Babylonian ayanamsa (Kugler 1)"},{id:10,name:"Babylonian (Kugler 2)",description:"Babylonian ayanamsa (Kugler 2)"},{id:11,name:"Babylonian (Kugler 3)",description:"Babylonian ayanamsa (Kugler 3)"},{id:12,name:"Babylonian (Huber)",description:"Babylonian ayanamsa (Huber)"},{id:13,name:"Eta Piscium",description:"Eta Piscium ayanamsa"},{id:14,name:"Aldebaran 15 Tau",description:"Aldebaran at 15\xB0 Taurus"},{id:15,name:"Hipparchos",description:"Hipparchos ayanamsa"},{id:16,name:"Sassanian",description:"Sassanian ayanamsa"},{id:17,name:"Galact. Center (Brand)",description:"Galactic Center ayanamsa (Brand)"},{id:18,name:"J2000",description:"J2000.0 reference frame"},{id:19,name:"J1900",description:"J1900.0 reference frame"},{id:20,name:"B1950",description:"B1950.0 reference frame"},{id:21,name:"Suryasiddhanta",description:"Suryasiddhanta ayanamsa"},{id:22,name:"Suryasiddhanta (mean Sun)",description:"Suryasiddhanta (mean Sun)"},{id:23,name:"Aryabhata",description:"Aryabhata ayanamsa"},{id:24,name:"Aryabhata 522",description:"Aryabhata 522 CE ayanamsa"},{id:25,name:"Babylonian (Britton)",description:"Babylonian ayanamsa (Britton)"},{id:26,name:"True Chitra",description:"True Chitra ayanamsa"},{id:27,name:"True Revati",description:"True Revati ayanamsa"},{id:28,name:"True Pushya",description:"True Pushya ayanamsa"},{id:29,name:"Galactic (Gil Brand)",description:"Galactic Center (Gil Brand)"},{id:30,name:"Galactic Equator (IAU1958)",description:"Galactic Equator (IAU1958)"},{id:31,name:"Galactic Equator",description:"Galactic Equator"},{id:32,name:"Galactic Equator (mid-Mula)",description:"Galactic Equator at mid-Mula"},{id:33,name:"Skydram (Mardyks)",description:"Skydram ayanamsa (Mardyks)"},{id:34,name:"True Mula",description:"True Mula ayanamsa"},{id:35,name:"Dhruva Galactic Center",description:"Dhruva Galactic Center ayanamsa"},{id:36,name:"Aryabhata Mean Sun",description:"Aryabhata Mean Sun ayanamsa"},{id:37,name:"Lahiri VP285",description:"Lahiri VP285 ayanamsa"},{id:38,name:"Krishnamurti VP291",description:"Krishnamurti VP291 ayanamsa"},{id:39,name:"Lahiri ICRC",description:"Lahiri ICRC ayanamsa"}],t=[];return n.forEach(r=>{try{d.swe_set_sid_mode(r.id,0,0);let i=d.swe_get_ayanamsa_ut(e);t.push({name:r.name,id:r.id,degree:i||this.getFallbackAyanamsa(r.id,a),description:r.description})}catch{t.push({name:r.name,id:r.id,degree:this.getFallbackAyanamsa(r.id,a),description:r.description})}}),t.sort((r,i)=>r.degree-i.degree),t}getSpecificAyanamsa(a,e){let n=this.getAyanamsa(a);if(typeof e=="number")return n.find(t=>t.id===e)||null;{let t=n.find(r=>r.name.toLowerCase()===e.toLowerCase());return t||n.find(r=>r.name.toLowerCase().includes(e.toLowerCase()))||null}}getFallbackAyanamsa(a,e){let t=(e.getFullYear()-1900)/100;switch(a){case 0:return 24.74+1.39*t-.01*t*t;case 1:return 22.46+1.39*t-.01*t*t;case 3:return 21.58+1.39*t-.01*t*t;case 5:return 23.23+1.39*t-.01*t*t;case 7:return 22.46+1.39*t-.01*t*t;default:return 22.46+1.39*t-.01*t*t}}calculateSunrise(a,e){try{let n=this.dateToJulian(a);try{return this.calculateSunriseAccurate(a,e)}catch{console.log("Swiss Ephemeris sunrise calculation failed, using fallback")}return this.calculateSunriseAccurate(a,e)}catch(n){return console.warn("Sunrise calculation failed:",n),this.calculateSunriseSimple(a,e)}}calculateSunriseAccurate(a,e){let n=this.dateToJulian(a),t=e.latitude*Math.PI/180,r=e.longitude*Math.PI/180,i=n-2451545,s=(280.46+.9856474*i)*Math.PI/180,o=(357.528+.9856003*i)*Math.PI/180,l=s+(1.915*Math.sin(o)+.02*Math.sin(2*o))*Math.PI/180,m=Math.atan2(Math.cos(23.439*Math.PI/180)*Math.sin(l),Math.cos(l)),c=Math.asin(Math.sin(23.439*Math.PI/180)*Math.sin(l)),h=-.8333*Math.PI/180,p=(Math.sin(h)-Math.sin(t)*Math.sin(c))/(Math.cos(t)*Math.cos(c));if(p>1){let y=new Date(a);return y.setHours(6,0,0,0),y}if(p<-1){let y=new Date(a);return y.setHours(0,0,0,0),y}let k=Math.acos(p),A=(m-r-k)/(2*Math.PI),b=(n+A-Math.floor(n+A))*24,S=new Date(a),f=Math.floor(b),T=Math.floor((b-f)*60),N=Math.floor(((b-f)*60-T)*60);return S.setUTCHours(f,T,N,0),S}calculateSunriseSimple(a,e){let n=new Date(a);return n.setHours(6,0,0,0),n}calculateSunset(a,e){try{let n=this.dateToJulian(a);try{return this.calculateSunsetAccurate(a,e)}catch{console.log("Swiss Ephemeris sunset calculation failed, using fallback")}return this.calculateSunsetAccurate(a,e)}catch(n){return console.warn("Sunset calculation failed:",n),this.calculateSunsetSimple(a,e)}}calculateSunsetAccurate(a,e){let n=this.dateToJulian(a),t=e.latitude*Math.PI/180,r=e.longitude*Math.PI/180,i=n-2451545,s=(280.46+.9856474*i)*Math.PI/180,o=(357.528+.9856003*i)*Math.PI/180,l=s+(1.915*Math.sin(o)+.02*Math.sin(2*o))*Math.PI/180,m=Math.atan2(Math.cos(23.439*Math.PI/180)*Math.sin(l),Math.cos(l)),c=Math.asin(Math.sin(23.439*Math.PI/180)*Math.sin(l)),h=-.8333*Math.PI/180,p=(Math.sin(h)-Math.sin(t)*Math.sin(c))/(Math.cos(t)*Math.cos(c));if(p>1){let y=new Date(a);return y.setHours(18,0,0,0),y}if(p<-1){let y=new Date(a);return y.setHours(23,59,59,999),y}let k=Math.acos(p),A=(m-r+k)/(2*Math.PI),b=(n+A-Math.floor(n+A))*24,S=new Date(a),f=Math.floor(b),T=Math.floor((b-f)*60),N=Math.floor(((b-f)*60-T)*60);return S.setUTCHours(f,T,N,0),S}calculateSunsetSimple(a,e){let n=new Date(a);return n.setHours(18,0,0,0),n}calculateNakshatra(a){let e=["Ashwini","Bharani","Krittika","Rohini","Mrigashira","Ardra","Punarvasu","Pushya","Ashlesha","Magha","Purva Phalguni","Uttara Phalguni","Hasta","Chitra","Swati","Vishakha","Anuradha","Jyeshtha","Mula","Purva Ashadha","Uttara Ashadha","Shravana","Dhanishta","Shatabhisha","Purva Bhadrapada","Uttara Bhadrapada","Revati"],n=13.333333333333334,t=n/4,r=g(a),i=Math.floor(r/n)+1,s=r%n,o=Math.floor(s/t)+1;return{nakshatra:i,pada:o,name:e[i-1]||"Unknown"}}dateToJulian(a){let e=a.getUTCFullYear(),n=a.getUTCMonth()+1,t=a.getUTCDate(),r=a.getUTCHours()+a.getUTCMinutes()/60+a.getUTCSeconds()/3600;try{return d.swe_julday(e,n,t,r,1)}catch{return a.getTime()/864e5+24405875e-1}}julianToDate(a){try{let e=d.swe_revjul(a,1);return new Date(e.year,e.month-1,e.day,Math.floor(e.hour),Math.floor(e.hour%1*60))}catch{return new Date((a-24405875e-1)*864e5)}}getPlanetId(a){return this.planetMap[a]!==void 0?this.planetMap[a]:0}getFallbackPosition(a,e){let n=Math.floor((e.getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),r=(e.getFullYear()-2e3)/100,i={Sun:{dailyMotion:.985647,epoch2000:280.46,lat:0},Moon:{dailyMotion:13.176396,epoch2000:218.316,lat:5.145},Mercury:{dailyMotion:4.092317,epoch2000:252.251,lat:3.395},Venus:{dailyMotion:1.602136,epoch2000:181.98,lat:3.395},Mars:{dailyMotion:.524071,epoch2000:355.433,lat:1.85},Jupiter:{dailyMotion:.083056,epoch2000:34.351,lat:1.304},Saturn:{dailyMotion:.033371,epoch2000:50.078,lat:2.489}},s=i[a]||i.Sun,o=g(s.epoch2000+s.dailyMotion*n+r*1.7),l=Math.sin(n*.1)*s.lat;return{longitude:o,latitude:l}}getCurrentPlanets(a=new Date,e=1){let n=new P,t=["Sun","Moon","Mercury","Venus","Mars","Jupiter","Saturn"],r=[],i=this.getSpecificAyanamsa(a,e),s=i?i.degree:24;for(let o of t)try{let l=this.calculatePosition(a,o),m=g(l.longitude-s),c=n.calculateRashi(m),h=n.calculateNakshatra(m);r.push({planet:o,longitude:m,latitude:l.latitude,rashi:c,nakshatra:h})}catch(l){console.warn(`Could not calculate position for ${o}:`,l);let m=this.getFallbackPosition(o,a),c=g(m.longitude-s);r.push({planet:o,longitude:c,latitude:m.latitude,rashi:n.calculateRashi(c),nakshatra:n.calculateNakshatra(c)})}return r}cleanup(){try{d.swe_close()}catch(a){console.warn("Error closing Swiss Ephemeris:",a)}}};var w=class{constructor(){this.varaNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];this.ephemeris=new M,this.planetary=new P}calculatePanchanga(a,e,n=!0){let r=this.ephemeris.calculateSunrise(a,e)||a,i,s;if(n){let b=this.ephemeris.calculateLahiriAyanamsa(r),S=this.ephemeris.calculatePosition(r,"Sun"),f=this.ephemeris.calculatePosition(r,"Moon");i={longitude:this.normalizeAngle(S.longitude-b),latitude:S.latitude},s={longitude:this.normalizeAngle(f.longitude-b),latitude:f.latitude}}else i=this.ephemeris.calculatePosition(r,"Sun"),s=this.ephemeris.calculatePosition(r,"Moon");let o=this.planetary.calculateTithi(i.longitude,s.longitude),l=this.ephemeris.calculateNakshatra(s.longitude),m=this.planetary.calculateYoga(i.longitude,s.longitude),c=this.planetary.calculateKarana(i.longitude,s.longitude),h=this.getVara(a),p=this.ephemeris.calculateSunrise(a,e),k=this.ephemeris.calculateSunset(a,e),A=this.getMoonPhase(i.longitude,s.longitude);return{date:a,location:{latitude:e.latitude,longitude:e.longitude,timezone:e.timezone||"UTC",name:e.name},tithi:o,nakshatra:l,yoga:m,karana:c,vara:h,sunrise:p,sunset:k,moonPhase:A}}normalizeAngle(a){let e=a%360;return e<0&&(e+=360),e}getVara(a){let e=this.dateToJulian(a),n=Math.floor((e+1.5)%7);return{vara:n,name:this.varaNames[n]}}dateToJulian(a){let e=a.getUTCFullYear(),n=a.getUTCMonth()+1,t=a.getUTCDate(),r=a.getUTCHours(),i=a.getUTCMinutes(),s=a.getUTCSeconds(),o=a.getUTCMilliseconds(),l=r+i/60+s/3600+o/36e5,m=Math.floor((14-n)/12),c=e+4800-m,h=n+12*m-3,p=t+Math.floor((153*h+2)/5)+365*c+Math.floor(c/4)-Math.floor(c/100)+Math.floor(c/400)-32045;return p+=(l-12)/24,p}getMoonPhase(a,e){let n=g(e-a);return n<45?"New Moon":n<90?"Waxing Crescent":n<135?"First Quarter":n<180?"Waxing Gibbous":n<225?"Full Moon":n<270?"Waning Gibbous":n<315?"Last Quarter":"Waning Crescent"}calculateRahuKaal(a,e){let n=this.ephemeris.calculateSunrise(a,e),t=this.ephemeris.calculateSunset(a,e);if(!n||!t)return null;let i=(t.getTime()-n.getTime())/8,s=a.getDay(),o;switch(s){case 0:o=4;break;case 1:o=1;break;case 2:o=6;break;case 3:o=3;break;case 4:o=2;break;case 5:o=5;break;case 6:o=0;break;default:o=0}let l=new Date(n.getTime()+o*i),m=new Date(l.getTime()+i);return{start:l,end:m}}generateReport(a){let{date:e,location:n,tithi:t,nakshatra:r,yoga:i,karana:s,vara:o,sunrise:l,sunset:m,moonPhase:c}=a,h=` === PANCHANGA for ${x(e)} === `;return n&&(n.name?(h+=`Location: ${n.name} `,h+=`Coordinates: ${n.latitude}\xB0N, ${n.longitude}\xB0E `):h+=`Location: ${n.latitude}\xB0N, ${n.longitude}\xB0E `,n.timezone&&(h+=`Timezone: ${n.timezone} `)),h+=` `,h+=`VARA (Day): ${o.name} `,h+=`TITHI: ${t.name} (${t.percentage.toFixed(1)}% complete) `,h+=`NAKSHATRA: ${r.name} (${r.nakshatra}) - Pada ${r.pada} `,h+=`YOGA: ${i.name} (${i.yoga}) `,h+=`KARANA: ${s.name} (${s.karana}) `,h+=`MOON PHASE: ${c} `,l&&(h+=`SUNRISE: ${l.toLocaleTimeString()} `),m&&(h+=`SUNSET: ${m.toLocaleTimeString()} `),h+=`Lunar Month: ${t.isWaxing?"Shukla Paksha":"Krishna Paksha"} `,h}cleanup(){this.ephemeris.cleanup()}};var D=class{constructor(){this.panchanga=new w,this.ephemeris=new M,this.planetary=new P}calculatePanchanga(a){let e={latitude:a.location.latitude,longitude:a.location.longitude,timezone:a.location.timezone,altitude:a.location.altitude||0},n=this.panchanga.calculatePanchanga(a.date,e,!0),t=this.panchanga.calculateRahuKaal(a.date,e);return{date:n.date,vara:{name:n.vara.name,number:n.vara.vara},tithi:{name:n.tithi.name,number:n.tithi.tithi,percentage:n.tithi.percentage,paksha:n.tithi.isWaxing?"Shukla":"Krishna"},nakshatra:{name:n.nakshatra.name,number:n.nakshatra.nakshatra,pada:n.nakshatra.pada},yoga:{name:n.yoga.name,number:n.yoga.yoga},karana:{name:n.karana.name,number:n.karana.karana},moonPhase:n.moonPhase,sunrise:n.sunrise,sunset:n.sunset,rahuKaal:t}}calculatePlanetaryPositions(a,e=["Sun","Moon","Mars","Venus","Jupiter","Saturn"]){let n={};return e.forEach(t=>{try{let r=this.ephemeris.calculatePosition(a,t),i=this.ephemeris.calculateSiderealPosition(a,t);n[t]={longitude:r.longitude,latitude:r.latitude,siderealLongitude:i.longitude}}catch(r){console.warn(`Could not calculate position for ${t}:`,r)}}),n}generatePanchangaReport(a){var t,r;let e=this.calculatePanchanga(a),n=` === PANCHANGA REPORT === `;return n+=`Date: ${e.date.toDateString()} `,a.location.name?(n+=`Location: ${a.location.name} `,n+=`Coordinates: ${a.location.latitude}\xB0N, ${a.location.longitude}\xB0E `):n+=`Location: ${a.location.latitude}\xB0N, ${a.location.longitude}\xB0E `,n+=`Timezone: ${a.location.timezone} `,n+=`VARA (Weekday): ${e.vara.name} `,n+=`TITHI: ${e.tithi.name} (${e.tithi.percentage.toFixed(1)}% complete) `,n+=`PAKSHA: ${e.tithi.paksha} (${e.tithi.paksha==="Shukla"?"Waxing":"Waning"}) `,n+=`NAKSHATRA: ${e.nakshatra.name} (${e.nakshatra.number}) - Pada ${e.nakshatra.pada} `,n+=`YOGA: ${e.yoga.name} (${e.yoga.number}) `,n+=`KARANA: ${e.karana.name} (${e.karana.number}) `,n+=`MOON PHASE: ${e.moonPhase} `,e.sunrise&&(n+=`SUNRISE: ${e.sunrise.toLocaleTimeString()} `),e.sunset&&(n+=`SUNSET: ${e.sunset.toLocaleTimeString()} `),(t=e.rahuKaal)!=null&&t.start&&((r=e.rahuKaal)!=null&&r.end)&&(n+=`RAHU KAAL: ${e.rahuKaal.start.toLocaleTimeString()} - ${e.rahuKaal.end.toLocaleTimeString()} `),n}cleanup(){this.ephemeris.cleanup(),this.panchanga.cleanup()}getAyanamsa(a=new Date){return this.ephemeris.getAyanamsa(a)}getSpecificAyanamsa(a,e=new Date){return this.ephemeris.getSpecificAyanamsa(e,a)}};function U(u,a,e,n){let t=new D;try{return t.calculatePanchanga({date:u,location:{latitude:a,longitude:e,timezone:n}})}finally{t.cleanup()}}function F(u,a,e,n,t){let r=new D;try{return r.generatePanchangaReport({date:u,location:{latitude:a,longitude:e,timezone:n,name:t}})}finally{r.cleanup()}}function J(u=new Date){let a=new M;try{return a.getAyanamsa(u)}finally{a.cleanup()}}function j(u,a=new Date){let e=new M;try{return e.getSpecificAyanamsa(a,u)}finally{e.cleanup()}}function z(u=new Date,a=1){let e=new M;try{return e.getCurrentPlanets(u,a)}finally{e.cleanup()}}var G=D;0&&(module.exports={AstronomicalCalculator,Ephemeris,NAKSHATRAS,Panchanga,Planetary,RASHIS,getAyanamsa,getCurrentPlanets,getPanchanga,getPanchangaReport,getSpecificAyanamsa}); //# sourceMappingURL=index.js.map