mirror of
https://github.com/acamarata/pray-calc.git
synced 2026-06-30 19:04:26 +00:00
chore: untrack AGENTS.md (AI working memory, not source code)
This commit is contained in:
parent
cf68c044a6
commit
681126643f
1 changed files with 0 additions and 116 deletions
|
|
@ -1,116 +0,0 @@
|
|||
# pray-calc — PRI (Per-Repo Instructions)
|
||||
|
||||
**Cascade:** GCI → ASI → PPI (`/Volumes/X9/Sites/acamarata/.claude/CLAUDE.md`) → **PRI (this file)**
|
||||
|
||||
## What This Is
|
||||
|
||||
High-precision Islamic prayer times calculator in TypeScript. Computes Fajr, Dhuhr, Asr,
|
||||
Maghrib, Isha, Qiyam, Sunrise, and solar Noon for any location on Earth. Uses a physics-
|
||||
grounded dynamic twilight angle algorithm as the primary method. Includes 14 traditional
|
||||
fixed-angle methods for direct comparison.
|
||||
|
||||
**npm:** `pray-calc@2.1.0`
|
||||
**Language:** TypeScript source → dual CJS/ESM build (tsup)
|
||||
**Node requirement:** >=20
|
||||
**License:** MIT
|
||||
|
||||
## Dependencies
|
||||
|
||||
- **nrel-spa** (^2.0.1) — NREL Solar Position Algorithm (zero-dep, sync, acamarata's own)
|
||||
- No moon dependency. Moon data: use `moon-sighting` package.
|
||||
|
||||
Dev: @types/node, tsup, typescript
|
||||
|
||||
## v2 API Surface
|
||||
|
||||
```typescript
|
||||
// Core functions
|
||||
getTimes(date, lat, lng, tz?, elevation?, temperature?, pressure?, hanafi?): PrayerTimes
|
||||
calcTimes(...): FormattedPrayerTimes
|
||||
getTimesAll(...): PrayerTimesAll
|
||||
calcTimesAll(...): FormattedPrayerTimesAll
|
||||
|
||||
// Low-level
|
||||
getAngles(date, lat, lng, elevation?, temperature?, pressure?): TwilightAngles
|
||||
getAsr(solarNoon, latitude, declination, hanafi?): number
|
||||
getQiyam(fajrTime, ishaTime): number
|
||||
getMscFajr(date, latitude): number // minutes before sunrise
|
||||
getMscIsha(date, latitude, shafaq?): number // minutes after sunset
|
||||
|
||||
// Ephemeris
|
||||
solarEphemeris(jd): { decl, r, eclLon }
|
||||
toJulianDate(date): number
|
||||
|
||||
// Reference data
|
||||
METHODS: MethodDefinition[]
|
||||
```
|
||||
|
||||
`nrel-spa` API (v2.x): `getSpa(date, lat, lng, tz, opts, zeniths)` and `formatTime(h)`
|
||||
Note: `fractalTime` was renamed to `formatTime` in v2.0.0. `fractalTime` does not exist.
|
||||
|
||||
## Module Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── index.ts Main exports
|
||||
├── types.ts All TypeScript types
|
||||
├── getSolarEphemeris.ts Jean Meeus Ch. 25 — decl, r, eclLon
|
||||
├── getMSC.ts MSC piecewise seasonal model
|
||||
├── getAngles.ts Dynamic angle algorithm (3 layers)
|
||||
├── getAsr.ts Pure-math Asr (no SPA dependency)
|
||||
├── getQiyam.ts Last-third-of-night
|
||||
├── getTimes.ts Raw fractional-hour output
|
||||
├── calcTimes.ts Formatted HH:MM:SS output
|
||||
├── getTimesAll.ts All-methods batch SPA call
|
||||
└── calcTimesAll.ts All-methods formatted output
|
||||
```
|
||||
|
||||
## Domain Reference
|
||||
|
||||
Algorithm math, method angle table, and astronomical research facts:
|
||||
— load when working on angle calculations or method constants.
|
||||
|
||||
## getSpa Batch Pattern
|
||||
|
||||
`getTimesAll` uses one SPA call for all 14×2 + 2 dynamic zenith angles:
|
||||
|
||||
```typescript
|
||||
allZeniths = [90+fajrAngle, 90+ishaAngle, ...methodZeniths]
|
||||
// methodZeniths: 14 methods × 2 = 28 entries
|
||||
// Methods with null ishaAngle get placeholder 90+18 (overridden post-call)
|
||||
spaData.angles[0].sunrise → dynamic Fajr
|
||||
spaData.angles[1].sunset → dynamic Isha
|
||||
spaData.angles[2+i*2].sunrise → method[i] Fajr
|
||||
spaData.angles[2+i*2+1].sunset → method[i] Isha (if angle-based)
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
- `pnpm build` — tsup dual CJS/ESM build
|
||||
- `pnpm run typecheck` — tsc --noEmit
|
||||
- `pnpm test` — build + node test.mjs + node test-cjs.cjs (94 ESM + 12 CJS = 106 tests)
|
||||
|
||||
## Version History
|
||||
|
||||
- **v2.0.0** — TypeScript rewrite, 14 methods, physics corrections, no suncalc, no moon
|
||||
- **v1.7.2** — Last CJS version with moon functions (getMoon, getMoonPhase, etc.)
|
||||
- Moon functions migrated to `moon-sighting` package
|
||||
|
||||
## Moon Migration
|
||||
|
||||
All moon functions removed from v2. Users should:
|
||||
|
||||
```bash
|
||||
pnpm add moon-sighting
|
||||
```
|
||||
|
||||
Map: `getMoon` → `getMoon`, `getMoonPhase` → `getMoonPhase`, etc.
|
||||
See `.github/wiki/Moon-Migration.md` for full table. moon-sighting uses Meeus Ch.47/48 +
|
||||
Odeh 2006 visibility, no suncalc dependency.
|
||||
|
||||
## Related
|
||||
|
||||
- nrel-spa: `~/Sites/acamarata/nrel-spa/` — solar foundation
|
||||
- moon-sighting: `~/Sites/acamarata/moon-sighting/` — lunar data
|
||||
- praycalc.com — live demo
|
||||
- praycalc.net — documentation site
|
||||
Loading…
Reference in a new issue