Skip to content

Releases: svarbhanu/grahan

v1.0.1 — first tokenless release

Choose a tag to compare

@svarbhanu svarbhanu released this 06 Jul 10:25

No code changes. This is the first release published entirely from CI via npm trusted publishing (OIDC): no tokens exist anywhere, every package now carries a SLSA provenance attestation (verify with npm audit signatures), and the release workflow refuses to publish a partial release — every package must pass an OIDC exchange preflight before any of them publishes.

v1.0.0 — the stability release

Choose a tag to compare

@svarbhanu svarbhanu released this 06 Jul 09:39

No calculation changed; everything around them became production-grade.

  • Frozen public API — the exact export surface of all three packages is pinned by tests; from 1.0.0 breaking changes only ship with a major version.
  • Input contract — bad inputs (latitude 95, an invalid Date, month 13, an unknown IANA zone) throw a RangeError naming the offending value instead of propagating NaN. Validators exported from @grahan/core.
  • Tokenless releases — a GitHub Actions release workflow publishes via npm trusted publishing (OIDC) with provenance, after an in-workflow tarball inspection.
  • API referencehttps://svarbhanu.github.io/grahan/ built from the JSDoc on every public function.
  • Browser proof in CI — the shipped tarballs bundle for the browser with zero Node builtins; a panchang-only bundle is 9.7 KB gzipped vs 92 KB for everything.
  • transits() gained the node: 'mean' | 'true' option; SECURITY.md and CONTRIBUTING.md added.

Full details in the CHANGELOG.

v0.5.0 — the day view

Choose a tag to compare

@svarbhanu svarbhanu released this 06 Jul 07:42

panchangAtSunrise(): a civil date labelled by its sunrise panchang, with the transition instant of every element — ordered span lists that render kshaya and vriddhi days honestly. The end-time solvers (tithiEndTime, nakshatraEndTime, yogaEndTime, karanaEndTime) measure max 37.5 s vs Swiss Ephemeris over 122 boundaries and were spot-checked against drikpanchang.com. Plus the true (osculating) lunar node — trueLunarNode(), max 66 arcsec vs swe.TRUE_NODE — with a node: 'mean' | 'true' option in kundali().

Full details in the CHANGELOG.

v0.4.0 - eclipses

Choose a tag to compare

@svarbhanu svarbhanu released this 06 Jul 04:34

The namesake release: ग्रहण (grahan) means eclipse - now it computes them.

  • nextLunarEclipse() - penumbral/partial/total, magnitudes, all contact times
  • nextSolarEclipse() - global: type incl. hybrids, centrality, greatest-eclipse instant/point/magnitude
  • nextSolarEclipseAt() - local circumstances for any lat/lon: visibility, magnitude, obscuration, four contacts, visible-maximum convention
  • nextNewMoon() / nextFullMoon() / nextSyzygy()

Verified against every eclipse 1900-2100 (457 lunar + 452 solar): detection and type exact, instants mean ~20 s vs Swiss Ephemeris, magnitudes within 0.002. Reference fixtures independently cross-checked against NASA/Espenak's Five Millennium Canon.

Full details in the CHANGELOG.

v0.3.0 — Bikram Sambat

Choose a tag to compare

@svarbhanu svarbhanu released this 05 Jul 21:37

The calendar release: @grahan/calendars joins the family.

New package: @grahan/calendars

Bikram Sambat (the Nepali civil calendar) ↔ Gregorian conversion, BS 1975–2200:

  • bsFromDate({ year, month, day }) — AD → BS with month names (roman + Devanagari), weekday, and a data-quality flag
  • dateFromBs({ year, month, day }) — BS → AD, validated against real month lengths
  • todayBs({ timezone }) — today's BS date in any IANA timezone

Data provenance, stated plainly: BS 1975–2083 is verified — month tables cross-validated between two independently maintained datasets and anchor dates checked against the published hamropatro.com calendar and documented historical events. BS 2084–2200 is projected from textbook Surya Siddhanta sankrantis (the classical solar model Nepal's calendar committee follows) with a civil-day rule fitted on the 109 verified years — 99.77% of verified month starts reproduce exactly; projected dates carry projected: true and may sit ±1 day off the calendar the authority eventually publishes.

npm install @grahan/calendars

@grahan/core and @grahan/vedic are version-aligned at 0.3.0 (no functional changes since 0.2.0).

Full details in the CHANGELOG.

v0.2.0 — the chart release

Choose a tag to compare

@svarbhanu svarbhanu released this 05 Jul 16:09

From panchang to full jyotish: kundali() (nine grahas, whole-sign bhavas, navamsa), SVG chart rendering in the North & South Indian styles, Vimshottari dashas, transits, muhurta finding, and 36-point gun-milan — plus the astronomy underneath: Mercury–Saturn positions (max 7.8″ vs Swiss Ephemeris, 1900–2100) and the ascendant (max 3.1″).

Zero runtime dependencies, verified against committed Swiss Ephemeris fixtures. See the CHANGELOG for the full surface.

v0.1.0 — one perfect function

Choose a tag to compare

@svarbhanu svarbhanu released this 04 Jul 12:49

First release: panchang() end-to-end. @grahan/core (julian day, delta-T, timezones, apparent Sun/Moon, mean node, sidereal time, sunrise/sunset with polar states, moon phase) and @grahan/vedic (Lahiri ayanamsa, tithi, nakshatra, yoga, karana, vaar, Rahu Kaal, panchang). Verified against Swiss Ephemeris 2.10 fixtures: Sun max 4.6 arcsec, Moon max 65 arcsec, sunrise/sunset max 4.6 s. Install: npm install @grahan/vedic