No description
Find a file
Aric Camarata af34aef986 chore: remove .npmignore, add c8 coverage, fix ci.yml (T-E5-03)
- Remove .npmignore (violation: npm-package-standard requires files field in
  package.json, not .npmignore; files field was already present and correct)
- Add c8@^10.1.3 to devDependencies for native V8 coverage (ADR-008)
- Fix coverage script: was 'node --test' (missing test.mjs), now correct
- Replace lint job in ci.yml with coverage job per ci-standard.md four-job
  pattern (test/typecheck/pack-check/coverage); lint+format remain as local
  scripts invocable manually

npm pack --dry-run: zero warnings, 11 files, expected contents verified.
Tests: 119 ESM + 15 CJS = 134 pass, 0 fail.
2026-05-30 15:40:23 -04:00
.github chore: remove .npmignore, add c8 coverage, fix ci.yml (T-E5-03) 2026-05-30 15:40:23 -04:00
src chore: adopt shared config packages (tsconfig, eslint, prettier) 2026-05-30 15:06:05 -04:00
.editorconfig v2.0.0 — TypeScript rewrite, dual ESM/CJS, 14 methods + PCD dynamic algorithm 2026-02-25 18:11:20 -05:00
.gitignore refactor: code quality improvements across the board 2026-03-08 11:10:22 -04:00
.npmrc v2.0.0 — TypeScript rewrite, dual ESM/CJS, 14 methods + PCD dynamic algorithm 2026-02-25 18:11:20 -05:00
.nvmrc v2.0.0 — TypeScript rewrite, dual ESM/CJS, 14 methods + PCD dynamic algorithm 2026-02-25 18:11:20 -05:00
CHANGELOG.md chore: bump to v2.1.1 2026-05-28 13:54:55 -04:00
eslint.config.mjs chore: adopt shared config packages (tsconfig, eslint, prettier) 2026-05-30 15:06:05 -04:00
LICENSE Fixes for 1.6.1 2025-05-04 09:34:00 -04:00
package.json chore: remove .npmignore, add c8 coverage, fix ci.yml (T-E5-03) 2026-05-30 15:40:23 -04:00
pnpm-lock.yaml chore: remove .npmignore, add c8 coverage, fix ci.yml (T-E5-03) 2026-05-30 15:40:23 -04:00
pnpm-workspace.yaml v2.0.0 — TypeScript rewrite, dual ESM/CJS, 14 methods + PCD dynamic algorithm 2026-02-25 18:11:20 -05:00
README.md chore: bump to v2.1.1 2026-05-28 13:54:55 -04:00
test-cjs.cjs feat: add getMidnight and Midnight field to prayer times output 2026-03-22 09:22:59 -04:00
test.mjs feat: add getMidnight and Midnight field to prayer times output 2026-03-22 09:22:59 -04:00
tsconfig.json chore: adopt shared config packages (tsconfig, eslint, prettier) 2026-05-30 15:06:05 -04:00
tsup.config.ts v2.0.0 — TypeScript rewrite, dual ESM/CJS, 14 methods + PCD dynamic algorithm 2026-02-25 18:11:20 -05:00

pray-calc

npm version CI License: MIT

Islamic prayer times for any location and date. The primary method uses a physics-grounded dynamic twilight angle algorithm that adjusts Fajr and Isha angles for latitude, season, Earth-Sun distance, and atmospheric conditions. Fourteen traditional fixed-angle methods are included for comparison. Single runtime dependency: nrel-spa.

Installation

npm install pray-calc

Quick Start

import { calcTimes } from 'pray-calc';

const times = calcTimes(
  new Date('2024-06-21'),
  40.7128,  // New York latitude
  -74.0060, // longitude
  -4,       // UTC offset (hours)
);

console.log(times.Fajr);    // "03:51:24"
console.log(times.Sunrise); // "05:25:08"
console.log(times.Dhuhr);   // "13:01:17"
console.log(times.Asr);     // "17:02:43"
console.log(times.Maghrib); // "20:31:17"
console.log(times.Isha);    // "22:07:43"

CommonJS:

const { calcTimes } = require('pray-calc');

Use calcTimesAll to get all 14 traditional method times alongside the dynamic result.

TypeScript

import type {
  PrayerTimes,
  FormattedPrayerTimes,
  PrayerTimesAll,
  MethodDefinition,
} from 'pray-calc';

Documentation

Full API reference, dynamic algorithm details, traditional method table, and high-latitude handling: GitHub Wiki

Acknowledgments

Solar position calculations use nrel-spa, a port of the NREL SPA by Ibrahim Reda and Afshin Andreas. The seasonal twilight model builds on the work of Khalid Shaukat (Moonsighting Committee Worldwide).

License

MIT. Copyright (c) 2023-2026 Aric Camarata.