mirror of
https://github.com/acamarata/pray-calc.git
synced 2026-06-30 19:04:26 +00:00
Complete rewrite from plain JavaScript to TypeScript with dual CJS/ESM output via tsup. Removes all legacy .js source files and the old CommonJS-only index. Key changes: - Full TypeScript source in src/ with strict mode and declaration maps - tsup build: dist/index.cjs + dist/index.mjs + dual .d.ts / .d.mts types - 14 traditional fixed-angle methods (UOIF through MUIS) + MSC seasonal method - PCD dynamic algorithm: MSC seasonal base + Earth-Sun distance correction + ecliptic geometry + atmospheric refraction + observer elevation - getTimesAll() batches all 14x2 zenith angles into a single SPA call - getMscFajr() / getMscIsha() expose MSC seasonal reference directly - getAngles() returns the PCD-computed fajrAngle and ishaAngle - High-latitude bounds: angles clipped to [10, 20] above 55N - 106 tests across ESM and CJS (test.mjs + test-cjs.cjs) - CI matrix: Node 20/22/24, typecheck, pack-check - Wiki: 12 reference pages + 6-page research section with global accuracy study, home-territory comparison, observational evidence, and field observation matrix - Moon functions removed (migrated to moon-sighting package) - pnpm-only, Node >=20, sideEffects: false
25 lines
940 B
TypeScript
25 lines
940 B
TypeScript
/**
|
|
* Qiyam al-Layl (night prayer) time calculation.
|
|
*
|
|
* Returns the start of the last third of the night, which is the recommended
|
|
* time for Tahajjud / Qiyam al-Layl. The night is defined as the period
|
|
* from Isha to Fajr.
|
|
*/
|
|
|
|
/**
|
|
* Compute the start of the last third of the night.
|
|
*
|
|
* @param fajrTime - Fajr time in fractional hours
|
|
* @param ishaTime - Isha time in fractional hours
|
|
* @returns Start of the last third of the night (fractional hours)
|
|
*/
|
|
export function getQiyam(fajrTime: number, ishaTime: number): number {
|
|
// If Fajr is numerically earlier (e.g. 5.5) than Isha (e.g. 21.5), Fajr
|
|
// is actually the NEXT day — add 24 to get the correct night length.
|
|
const adjustedFajr = fajrTime < ishaTime ? fajrTime + 24 : fajrTime;
|
|
|
|
const nightLength = adjustedFajr - ishaTime;
|
|
const lastThirdStart = ishaTime + (2 * nightLength) / 3;
|
|
|
|
return lastThirdStart >= 24 ? lastThirdStart - 24 : lastThirdStart;
|
|
}
|