pray-calc/CHANGELOG.md
Aric Camarata 4534b41957 feat: add getMidnight and Midnight field to prayer times output
Computes the midpoint of the night (Maghrib to Fajr), commonly used as
the Isha prayer endpoint. Also works with sunrise as the second anchor
for the astronomical variant.

Closes #1
2026-03-22 09:22:59 -04:00

3.8 KiB
Raw Blame History

Changelog

All notable changes to this project will be documented in this file.

[2.1.0] - 2026-03-22

Added

  • getMidnight() function: computes the midpoint of the night (Maghrib to Fajr). Useful as the Isha prayer endpoint per the hadith in Sahih Muslim. Also works with sunrise as the second anchor for the astronomical variant.
  • Midnight field added to PrayerTimes, FormattedPrayerTimes, PrayerTimesAll, and FormattedPrayerTimesAll interfaces
  • 15 new tests covering getMidnight standalone and integrated output

[2.0.0] - 2026-02-25

Added

  • Full TypeScript rewrite with dual CJS/ESM build (tsup)
  • Physics-grounded dynamic twilight angle algorithm: MSC seasonal base + Earth-Sun distance correction + Fourier harmonic smoothing + atmospheric refraction + elevation horizon dip
  • Three new traditional methods: IGUT/Tehran (17.7°/14°), Kuwait (18°/17.5°), Qatar (18°/90 min): total now 14
  • getAngles() exported as a standalone function
  • getMscFajr() / getMscIsha() exported with shafaq mode parameter (general, ahmer, abyad)
  • solarEphemeris() / toJulianDate() exported: Jean Meeus solar ephemeris (declination, r, ecliptic lon)
  • METHODS array exported for documentation and tooling
  • All TypeScript types exported (PrayerTimes, FormattedPrayerTimes, PrayerTimesAll, etc.)
  • .wiki/ documentation: Home, API Reference, Dynamic Algorithm, Traditional Methods, Architecture, Twilight Physics, High-Latitude, Asr Calculation, Changelog
  • GitHub Actions CI (Node 20/22/24 matrix, typecheck, pack-check) and wiki sync workflow
  • 100-scenario ESM test suite + CJS smoke tests

Changed

  • getAsr refactored from internal SPA dependency to pure math using Meeus declination
  • getTimesAll now batches all 14×2 + 2 dynamic angles in a single SPA call
  • nrel-spa updated from v1.x to v2.0.1 (formatTime replaces fractalTime)
  • Node engine requirement raised from >=12 to >=20
  • Package exports field added with types-first conditional exports
  • sideEffects: false for tree-shaking
  • publishConfig.access: public added
  • repository.url uses git+https:// prefix

Removed

  • All moon-related functions (getMoon, getMoonPhase, getMoonPosition, getMoonIllumination, getMoonVisibility): moved to moon-sighting package
  • suncalc runtime dependency (removed with moon functions)
  • getEarthSunDistance helper (inlined into getSolarEphemeris)
  • methods.json (methods now embedded in getTimesAll.ts with full metadata)
  • CommonJS index.js source (replaced by TypeScript src/)
  • index.d.ts hand-written types (replaced by generated dist/index.d.ts)
  • mocha and eslint dev dependencies (replaced by plain node:assert tests)

[1.0.0] - 2023-11-11

  • Initial release

[1.1.0] - 2023-11-12

  • Updated calculation behavior to be more accurate (major)

[1.2.3] - 2023-11-12

  • Moved timezone to main args and changed default behavior (major)
  • Updated test cases and readme to reflect new usage (minor)

[1.3.2] - 2023-11-13

  • Major updates to getMoon with own functions

[1.4.0] - 2023-11-14

  • Renamed to "pray-calc" and removed old package
  • Improved Synodic accuracy slightly and lastKnownMoon

[1.4.1] = 2023-12-01

  • Modified getMoonVisibility to use adjusted moon phase for end of cycle

[1.6.0] = 2025-05-04

  • Major fixes for core files and calculations
  • Updated to use the new "nrel-spa" v1.3.0

[1.6.1] - 2025-05-04

  • Fixed missing modules and types definitions lost in last update
  • Locked suncalc dependency to ^1.9.0
  • Clarified scripts: build, test, and prepublishOnly in package.json

[1.6.2] - 2025-05-04

  • Fixed Package issues

[1.7.0] = 2025-05-04

  • Major update to main algorithm
  • Fixes to syntax and bugs

[1.7.1] = 2025-05-14

  • Update to package meta and location

[1.7.2] = 2025-05-14

  • Added tests