tauqeet-js 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +75 -62
  2. package/dist/astronomy/index.cjs +2 -0
  3. package/dist/astronomy/index.cjs.map +1 -0
  4. package/dist/astronomy/index.d.cts +40 -0
  5. package/dist/astronomy/index.d.ts +40 -0
  6. package/dist/astronomy/index.js +2 -0
  7. package/dist/astronomy/index.js.map +1 -0
  8. package/dist/chunk-4GEHU4EV.js +2 -0
  9. package/dist/chunk-4GEHU4EV.js.map +1 -0
  10. package/dist/chunk-4JQOEJI5.cjs +2 -0
  11. package/dist/chunk-4JQOEJI5.cjs.map +1 -0
  12. package/dist/chunk-BJ45B342.cjs +2 -0
  13. package/dist/chunk-BJ45B342.cjs.map +1 -0
  14. package/dist/chunk-CSU6AEKX.js +2 -0
  15. package/dist/chunk-CSU6AEKX.js.map +1 -0
  16. package/dist/chunk-DJ357A47.js +2 -0
  17. package/dist/chunk-DJ357A47.js.map +1 -0
  18. package/dist/chunk-E4M4MYZR.cjs +2 -0
  19. package/dist/chunk-E4M4MYZR.cjs.map +1 -0
  20. package/dist/chunk-FQ6RGT3F.cjs +2 -0
  21. package/dist/chunk-FQ6RGT3F.cjs.map +1 -0
  22. package/dist/chunk-FTWK5BZJ.js +2 -0
  23. package/dist/chunk-FTWK5BZJ.js.map +1 -0
  24. package/dist/chunk-GIWGJKCS.js +2 -0
  25. package/dist/chunk-GIWGJKCS.js.map +1 -0
  26. package/dist/chunk-H2JLMZ5E.cjs +2 -0
  27. package/dist/chunk-H2JLMZ5E.cjs.map +1 -0
  28. package/dist/chunk-H33IJIM5.cjs +2 -0
  29. package/dist/chunk-H33IJIM5.cjs.map +1 -0
  30. package/dist/chunk-IAQLPBAC.js +2 -0
  31. package/dist/chunk-IAQLPBAC.js.map +1 -0
  32. package/dist/chunk-II6TW43P.cjs +2 -0
  33. package/dist/chunk-II6TW43P.cjs.map +1 -0
  34. package/dist/chunk-IPNHW5FC.js +2 -0
  35. package/dist/chunk-IPNHW5FC.js.map +1 -0
  36. package/dist/chunk-JA4E3Q7A.js +2 -0
  37. package/dist/chunk-JA4E3Q7A.js.map +1 -0
  38. package/dist/chunk-LTEJ7X6W.js +2 -0
  39. package/dist/chunk-LTEJ7X6W.js.map +1 -0
  40. package/dist/chunk-QMMOAGSC.js +2 -0
  41. package/dist/chunk-QMMOAGSC.js.map +1 -0
  42. package/dist/chunk-WFHQSUXS.cjs +2 -0
  43. package/dist/chunk-WFHQSUXS.cjs.map +1 -0
  44. package/dist/chunk-WXX4UNDC.js +2 -0
  45. package/dist/chunk-WXX4UNDC.js.map +1 -0
  46. package/dist/chunk-XL5IKB2X.js +2 -0
  47. package/dist/chunk-XL5IKB2X.js.map +1 -0
  48. package/dist/chunk-YDSVFKVM.cjs +2 -0
  49. package/dist/chunk-YDSVFKVM.cjs.map +1 -0
  50. package/dist/chunk-YMPRSR53.cjs +2 -0
  51. package/dist/chunk-YMPRSR53.cjs.map +1 -0
  52. package/dist/chunk-YSOESZ35.cjs +2 -0
  53. package/dist/chunk-YSOESZ35.cjs.map +1 -0
  54. package/dist/chunk-YZUP33VG.cjs +2 -0
  55. package/dist/chunk-YZUP33VG.cjs.map +1 -0
  56. package/dist/index-tSYKxCru.d.cts +64 -0
  57. package/dist/index-tSYKxCru.d.ts +64 -0
  58. package/dist/index.cjs +2 -1610
  59. package/dist/index.cjs.map +1 -0
  60. package/dist/index.d.cts +12 -351
  61. package/dist/index.d.ts +12 -351
  62. package/dist/index.js +2 -1560
  63. package/dist/index.js.map +1 -0
  64. package/dist/moon/index.cjs +2 -0
  65. package/dist/moon/index.cjs.map +1 -0
  66. package/dist/moon/index.d.cts +20 -0
  67. package/dist/moon/index.d.ts +20 -0
  68. package/dist/moon/index.js +2 -0
  69. package/dist/moon/index.js.map +1 -0
  70. package/dist/prayer/index.cjs +2 -0
  71. package/dist/prayer/index.cjs.map +1 -0
  72. package/dist/prayer/index.d.cts +17 -0
  73. package/dist/prayer/index.d.ts +17 -0
  74. package/dist/prayer/index.js +2 -0
  75. package/dist/prayer/index.js.map +1 -0
  76. package/dist/qibla/index.cjs +2 -0
  77. package/dist/qibla/index.cjs.map +1 -0
  78. package/dist/qibla/index.d.cts +22 -0
  79. package/dist/qibla/index.d.ts +22 -0
  80. package/dist/qibla/index.js +2 -0
  81. package/dist/qibla/index.js.map +1 -0
  82. package/dist/ramadan-BpmCzDzM.d.ts +77 -0
  83. package/dist/ramadan-Cr6YrTTX.d.cts +77 -0
  84. package/dist/ui/index.cjs +105 -0
  85. package/dist/ui/index.cjs.map +1 -0
  86. package/dist/ui/index.d.cts +43 -0
  87. package/dist/ui/index.d.ts +43 -0
  88. package/dist/ui/index.js +105 -0
  89. package/dist/ui/index.js.map +1 -0
  90. package/package.json +6 -16
package/README.md CHANGED
@@ -1,88 +1,101 @@
1
- # 🌌 Tauqeet.js
1
+ # TauqeetJS
2
2
 
3
- **Tauqeet.js** is a high-precision, low-code JavaScript library for Islamic prayer times and astronomical ephemeris. Built on the gold-standard algorithms of **Jean Meeus**, it provides sub-second accuracy for global prayer times, solar/lunar positioning, and Qibla direction.
3
+ **TauqeetJS** is a high-performance, modular, and headless-first TypeScript library for calculating Islamic prayer times and astronomical data. Designed for professional engineers, it prioritizes precision, type safety, and minimal bundle size.
4
4
 
5
- [![NPM Version](https://img.shields.io/npm/v/tauqeet-js)](https://www.npmjs.com/package/tauqeet-js)
6
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ ![Bundle Size](https://img.shields.io/bundlephobia/minzip/tauqeetjs)
7
7
 
8
- ## ✨ Why Tauqeet.js?
9
- In Urdu and Arabic, *Tauqeet* refers to the science of timekeeping, specifically for religious purposes. This library is designed to bring that ancient precision to the modern web with a focus on:
10
- - **Sub-Second Precision:** Uses Successive Approximation loops for perfect convergence.
11
- - **Topocentric Accuracy:** Accounts for refraction (**Bennett Formula**), solar semidiameter, parallax, and **Altitude (Elevation)**.
12
- - **Scientific Asr:** Refined shadow-counting logic using apparent visual horizons.
13
- - **Low-Code API:** Get results in one line of code.
14
- - **Robust:** Hardened against division-by-zero errors at poles and extreme latitudes.
8
+ ---
15
9
 
16
- ## 🚀 Quick Start (One-Liner)
10
+ ## Key Features
17
11
 
18
- ```javascript
19
- import { calculate } from 'tauqeet-js';
12
+ - **Headless-First**: Import only the logic you need. No forced UI dependencies.
13
+ - **Type-Safe**: Written in TypeScript with exhaustive definitions.
14
+ - **Robust Error Handling**: Uses the `Result<T, E>` pattern—no silent failures or unexpected exceptions.
15
+ - **Environmentally Aware**: High-precision atmospheric refraction adjustments (elevation, temperature, pressure).
16
+ - **Small Footprint**: Zero external dependencies in the core engine.
20
17
 
21
- // Get times for London (51.5, -0.1) using the Karachi method
22
- const times = calculate(51.5074, -0.1278);
18
+ ---
23
19
 
24
- console.log(times.fajr);
25
- ```
20
+ ## Quick Start
26
21
 
27
- ## 🛠️ Advanced Features
22
+ Install via your preferred package manager:
28
23
 
29
- ### 1. Elevation / Altitude Support
30
- Tauqeet.js handles the "Dip of the Horizon" based on your vertical height.
31
- ```javascript
32
- const times = calculate(31.4, 73.0, 'Karachi', 'Hanafi', new Date(), 1000); // 1000 meters elevation
24
+ ```bash
25
+ npm install tauqeet-js
26
+ # or
27
+ yarn add tauqeet-js
33
28
  ```
34
29
 
35
- ### 2. High-Level Config
36
- ```javascript
30
+ ### Basic Usage (Low-Code)
31
+
32
+ Get prayer times for a specific location using smart defaults (Karachi method, Hanafi madhab).
33
+
34
+ ```typescript
37
35
  import { getPrayerTimes } from 'tauqeet-js';
38
36
 
39
- const schedule = getPrayerTimes({
40
- location: { latitude: 31.4, longitude: 73.0, elevation: 500 },
41
- method: 'MWL',
42
- madhab: 'Hanafi',
43
- date: new Date()
37
+ const result = getPrayerTimes({
38
+ location: { latitude: 24.8607, longitude: 67.0011 }
44
39
  });
40
+
41
+ if (result.success) {
42
+ const { fajr, dhuhr, asr, maghrib, isha } = result.data;
43
+ console.log(`Fajr: ${fajr.toLocaleTimeString()}`);
44
+ } else {
45
+ console.error(`Calculation failed: ${result.error}`);
46
+ }
45
47
  ```
46
48
 
47
- ### 2. Scientific Asr Accuracy
48
- New in v1.0.1: Accounts for **Solar Semi-Diameter** and **Atmospheric Refraction** at both Noon (Dhuhr) and Asr for bit-perfect alignment with visual shadow observations.
49
-
50
- ### 3. Atmospheric Refraction (Bennett Formula)
51
- Specify your local weather conditions to refine refraction using the high-precision **Bennett's Formula (1982)**.
52
- ```javascript
53
- const times = getPrayerTimes({
54
- location: { latitude: 31.4, longitude: 73.0 },
55
- temperature: 25, // 25°C
56
- pressure: 1013, // 1013 mbar
57
- pressureUnit: 'mbar' // 'kPa' or 'mbar'
58
- });
49
+ ---
50
+
51
+ ## Core Concepts
52
+
53
+ ### Headless-First Architecture
54
+
55
+ To keep your production bundle small, TauqeetJS is designed to be imported modularly. If you only need the prayer calculation engine without Qibla or Moon logic:
56
+
57
+ ```typescript
58
+ import { getPrayerTimes } from 'tauqeetjs/prayer';
59
59
  ```
60
60
 
61
- ### 4. High-Precision Astronomy
62
- Access coordinates for the Sun, Moon (including phases), and Polaris.
63
- ```javascript
64
- import { Astronomy } from 'tauqeet-js';
61
+ ### The Result Pattern
62
+
63
+ Unlike libraries that throw errors or return `null`, TauqeetJS returns a `Result<T, E>` object. This ensures your application remains stable even with invalid inputs.
65
64
 
66
- const astro = new Astronomy();
67
- console.log(astro.moon.illumination); // Current moon phase %
68
- console.log(astro.sun.GHA); // Sun Greenwich Hour Angle
65
+ ```typescript
66
+ const result = getPrayerTimes(config);
67
+
68
+ if (!result.success) {
69
+ // result.error contains a descriptive string
70
+ handleError(result.error);
71
+ } else {
72
+ // result.data is fully typed
73
+ renderUI(result.data);
74
+ }
69
75
  ```
70
76
 
71
- ### 5. Qibla & Sun Alignment
72
- Calculates the Great Circle bearing, distance, and even **Sun Alignment** times (when the sun points exactly towards Qibla).
73
- ```javascript
74
- import { calculateQibla, calculateSunAtQibla } from 'tauqeet-js';
77
+ ---
78
+
79
+ ## Advanced Configuration
75
80
 
76
- const qibla = calculateQibla({ latitude: 31.4, longitude: 73.0 });
77
- const sunTimes = calculateSunAtQibla(31.4, 73.0);
78
- // sunTimes.qibla -> Time the sun is at the Qibla bearing
81
+ Fine-tune calculations for specific environmental conditions or local preferences.
82
+
83
+ ```typescript
84
+ const config = {
85
+ location: { latitude: 24.86, longitude: 67.01, elevation: 20 },
86
+ method: 'MWL',
87
+ madhab: 'Hanafi',
88
+ temperature: 25, // Celsius
89
+ pressure: 1010, // hPa/mbar
90
+ adjustments: {
91
+ fajr: 2, // Add 2 minutes
92
+ maghrib: 1 // Add 1 minute (safety margin)
93
+ }
94
+ };
79
95
  ```
80
96
 
81
- ## 📐 Accuracy Benchmark
82
- This library aligns with:
83
- - **Astro-Almanac HP** (Henning Umland)
84
- - **Jean Meeus** (Astronomical Algorithms)
85
- - **Islamic Standard Methods** (Karachi, MWL, ISNA, Egypt, Tehran, Jafari, Makkah)
97
+ ---
98
+
99
+ ## Documentation
86
100
 
87
- ## 📄 License
88
- MIT © 2026 Ghulam Hasnain.
101
+ For a full breakdown of the API, configuration options, and astronomical parameters, see [API.md](./API.md).
@@ -0,0 +1,2 @@
1
+ 'use strict';require('../chunk-WFHQSUXS.cjs');var chunkBJ45B342_cjs=require('../chunk-BJ45B342.cjs'),chunkYSOESZ35_cjs=require('../chunk-YSOESZ35.cjs'),chunkYMPRSR53_cjs=require('../chunk-YMPRSR53.cjs');require('../chunk-4JQOEJI5.cjs');Object.defineProperty(exports,"calculateMoon",{enumerable:true,get:function(){return chunkBJ45B342_cjs.a}});Object.defineProperty(exports,"getRefraction",{enumerable:true,get:function(){return chunkYSOESZ35_cjs.a}});Object.defineProperty(exports,"calculateNutation",{enumerable:true,get:function(){return chunkYMPRSR53_cjs.h}});Object.defineProperty(exports,"calculateSolar",{enumerable:true,get:function(){return chunkYMPRSR53_cjs.i}});//# sourceMappingURL=index.cjs.map
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,40 @@
1
+ interface SolarResult {
2
+ RA: number;
3
+ DEC: number;
4
+ GHA: number;
5
+ SHA: number;
6
+ SD: number;
7
+ HP: number;
8
+ EOT: number;
9
+ distance: number;
10
+ lambdaApp: number;
11
+ }
12
+ declare function calculateSolar(jd: number, deltaPsi: number, eps: number, TE: number, Tau: number, T: number): SolarResult;
13
+
14
+ interface MoonResult {
15
+ RA: number;
16
+ DEC: number;
17
+ GHA: number;
18
+ SHA: number;
19
+ SD: number;
20
+ HP: number;
21
+ illumination: number;
22
+ isWaxing: boolean;
23
+ distance: number;
24
+ }
25
+ declare function calculateMoon(jd: number, TE: number, deltaPsi: number, eps: number, GHAAtrue: number, sunLambda: number, sunRA: number, sunDec: number): MoonResult;
26
+
27
+ interface NutationResult {
28
+ deltaPsi: number;
29
+ deltaEps: number;
30
+ eps0: number;
31
+ eps: number;
32
+ }
33
+ declare function calculateNutation(TE: number): NutationResult;
34
+
35
+ /**
36
+ * Calculates the astronomical atmospheric refraction correction using Bennett's Formula (1982).
37
+ */
38
+ declare function getRefraction(apparentAltitudeDeg: number, temperatureC?: number, pressureMbar?: number): number;
39
+
40
+ export { calculateMoon, calculateNutation, calculateSolar, getRefraction };
@@ -0,0 +1,40 @@
1
+ interface SolarResult {
2
+ RA: number;
3
+ DEC: number;
4
+ GHA: number;
5
+ SHA: number;
6
+ SD: number;
7
+ HP: number;
8
+ EOT: number;
9
+ distance: number;
10
+ lambdaApp: number;
11
+ }
12
+ declare function calculateSolar(jd: number, deltaPsi: number, eps: number, TE: number, Tau: number, T: number): SolarResult;
13
+
14
+ interface MoonResult {
15
+ RA: number;
16
+ DEC: number;
17
+ GHA: number;
18
+ SHA: number;
19
+ SD: number;
20
+ HP: number;
21
+ illumination: number;
22
+ isWaxing: boolean;
23
+ distance: number;
24
+ }
25
+ declare function calculateMoon(jd: number, TE: number, deltaPsi: number, eps: number, GHAAtrue: number, sunLambda: number, sunRA: number, sunDec: number): MoonResult;
26
+
27
+ interface NutationResult {
28
+ deltaPsi: number;
29
+ deltaEps: number;
30
+ eps0: number;
31
+ eps: number;
32
+ }
33
+ declare function calculateNutation(TE: number): NutationResult;
34
+
35
+ /**
36
+ * Calculates the astronomical atmospheric refraction correction using Bennett's Formula (1982).
37
+ */
38
+ declare function getRefraction(apparentAltitudeDeg: number, temperatureC?: number, pressureMbar?: number): number;
39
+
40
+ export { calculateMoon, calculateNutation, calculateSolar, getRefraction };
@@ -0,0 +1,2 @@
1
+ import'../chunk-IAQLPBAC.js';export{a as calculateMoon}from'../chunk-XL5IKB2X.js';export{a as getRefraction}from'../chunk-CSU6AEKX.js';export{h as calculateNutation,i as calculateSolar}from'../chunk-FTWK5BZJ.js';import'../chunk-4GEHU4EV.js';//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,2 @@
1
+ var f=Object.defineProperty,g=Object.defineProperties;var h=Object.getOwnPropertyDescriptors;var d=Object.getOwnPropertySymbols;var i=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var k=Math.pow,e=(c,a,b)=>a in c?f(c,a,{enumerable:true,configurable:true,writable:true,value:b}):c[a]=b,l=(c,a)=>{for(var b in a||(a={}))i.call(a,b)&&e(c,b,a[b]);if(d)for(var b of d(a))j.call(a,b)&&e(c,b,a[b]);return c},m=(c,a)=>g(c,h(a));export{k as a,l as b,m as c};//# sourceMappingURL=chunk-4GEHU4EV.js.map
2
+ //# sourceMappingURL=chunk-4GEHU4EV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4GEHU4EV.js"}
@@ -0,0 +1,2 @@
1
+ 'use strict';var f=Object.defineProperty,g=Object.defineProperties;var h=Object.getOwnPropertyDescriptors;var d=Object.getOwnPropertySymbols;var i=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var k=Math.pow,e=(c,a,b)=>a in c?f(c,a,{enumerable:true,configurable:true,writable:true,value:b}):c[a]=b,l=(c,a)=>{for(var b in a||(a={}))i.call(a,b)&&e(c,b,a[b]);if(d)for(var b of d(a))j.call(a,b)&&e(c,b,a[b]);return c},m=(c,a)=>g(c,h(a));exports.a=k;exports.b=l;exports.c=m;//# sourceMappingURL=chunk-4JQOEJI5.cjs.map
2
+ //# sourceMappingURL=chunk-4JQOEJI5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4JQOEJI5.cjs"}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkYMPRSR53_cjs=require('./chunk-YMPRSR53.cjs');var W=[[0,0,1,0,6288774,-20905355],[2,0,-1,0,1274027,-3699111],[2,0,0,0,658314,-2955968],[0,0,2,0,213618,-569925],[0,1,0,0,-185116,48888],[0,0,0,2,-114332,-3149],[2,0,-2,0,58793,246158],[2,-1,-1,0,57066,-152138],[2,0,1,0,53322,-170733],[2,-1,0,0,45758,-204586],[0,1,-1,0,-40923,-129620],[1,0,0,0,-34720,108743],[0,1,1,0,-30383,104755],[2,0,0,-2,15327,10321],[0,0,1,2,-12528,0],[0,0,1,-2,10980,79661],[4,0,-1,0,10675,-34782],[0,0,3,0,10034,-23210],[4,0,-2,0,8548,-21636],[2,1,-1,0,-7888,24208],[2,1,0,0,-6766,30824],[1,0,-1,0,-5163,-8379],[1,1,0,0,4987,-16675],[2,-1,1,0,4036,-12831],[2,0,2,0,3994,-10445],[4,0,0,0,3861,-11650],[2,0,-3,0,3665,14403],[0,1,-2,0,-2689,-7003],[2,0,-1,2,-2602,0],[2,-1,-2,0,2390,10056],[1,0,1,0,-2348,6322],[2,-2,0,0,2236,-9884],[0,1,2,0,-2120,5751],[0,2,0,0,-2069,0],[2,-2,-1,0,2048,-4950],[2,0,1,-2,-1773,4130],[2,0,0,2,-1595,0],[4,-1,-1,0,1215,-3958],[0,0,2,2,-1110,0],[3,0,-1,0,-892,3258],[2,1,1,0,-810,2616],[4,-1,-2,0,759,-1897],[0,2,-1,0,-713,-2117],[2,2,-1,0,-700,2354],[2,1,-2,0,691,0],[2,-1,0,-2,596,0],[4,0,1,0,549,-1423],[0,0,4,0,537,-1117],[4,-1,0,0,520,-1571],[1,0,-2,0,-487,-1739],[2,1,0,-2,-399,0],[0,0,2,-2,-381,-4421],[1,1,1,0,351,0],[3,0,-2,0,-340,0],[4,0,-3,0,330,0],[2,-1,2,0,327,0],[0,2,1,0,-323,1165],[1,1,-1,0,299,0],[2,0,3,0,294,0],[2,0,-1,-2,0,8752]],j=[[0,0,0,1,5128122],[0,0,1,1,280602],[0,0,1,-1,277693],[2,0,0,-1,173237],[2,0,-1,1,55413],[2,0,-1,-1,46271],[2,0,0,1,32573],[0,0,2,1,17198],[2,0,1,-1,9266],[0,0,2,-1,8822],[2,-1,0,-1,8216],[2,0,-2,-1,4324],[2,0,1,1,4200],[2,1,0,-1,-3359],[2,-1,-1,1,2463],[2,-1,0,1,2211],[2,-1,-1,-1,2065],[0,1,-1,-1,-1870],[4,0,-1,-1,1828],[0,1,0,1,-1794],[0,0,0,3,-1749],[0,1,-1,1,-1565],[1,0,0,1,-1491],[0,1,1,1,-1475],[0,1,1,-1,-1410],[0,1,0,-1,-1344],[1,0,0,-1,-1335],[0,0,3,1,1107],[4,0,0,-1,1021],[4,0,-1,1,833],[0,0,1,-3,777],[4,0,-2,1,671],[2,0,0,-3,607],[2,0,2,-1,596],[2,-1,1,-1,491],[2,0,-2,1,-451],[0,0,3,-1,439],[2,0,2,1,422],[2,0,-3,-1,421],[2,1,-1,1,-366],[2,1,0,1,-351],[4,0,0,1,331],[2,-1,1,1,315],[2,-2,0,-1,302],[0,0,1,3,-283],[2,1,1,-1,-229],[1,1,0,-1,223],[1,1,0,1,223],[0,1,-2,-1,-220],[2,1,-1,-1,-220],[1,0,1,1,-185],[2,-1,-2,-1,181],[0,1,2,1,-177],[4,0,-2,-1,176],[4,-1,-1,-1,166],[1,0,1,-1,-164],[4,0,1,-1,132],[1,0,-1,-1,-119],[4,-1,0,-1,115],[2,-2,0,1,107]];function X(K,n,B,i,F,N,Q,U){let{abs:x,round:k}=Math,r=chunkYMPRSR53_cjs.g(218.3164591+481267.88134236*n-.0013268*n*n+n*n*n/538841-n*n*n*n/65194e3),_=chunkYMPRSR53_cjs.g(297.8502042+445267.1115168*n-.00163*n*n+n*n*n/545868-n*n*n*n/113065e3),h=chunkYMPRSR53_cjs.g(357.5291092+35999.0502909*n-1536e-7*n*n+n*n*n/2449e4),l=chunkYMPRSR53_cjs.g(134.9634114+477198.8676313*n+.008997*n*n+n*n*n/69699-n*n*n*n/14712e3),u=chunkYMPRSR53_cjs.g(93.2720993+483202.0175273*n-.0034029*n*n-n*n*n/3526e3+n*n*n*n/86331e4),g=chunkYMPRSR53_cjs.g(119.75+131.849*n),q=chunkYMPRSR53_cjs.g(53.09+479264.29*n),v=chunkYMPRSR53_cjs.g(313.45+481266.484*n),b=1-.002516*n-74e-7*n*n,p=b*b,A=0,L=0;for(let c=0;c<W.length;c++){let o=W[c],e=1,a=x(o[1]);a===1?e=b:a===2&&(e=p);let d=o[0]*_+o[1]*h+o[2]*l+o[3]*u;A+=e*o[4]*chunkYMPRSR53_cjs.a(d),L+=e*o[5]*chunkYMPRSR53_cjs.b(d);}let M=0;for(let c=0;c<j.length;c++){let o=j[c],e=1,a=x(o[1]);a===1?e=b:a===2&&(e=p);let d=o[0]*_+o[1]*h+o[2]*l+o[3]*u;M+=e*o[4]*chunkYMPRSR53_cjs.a(d);}A=A+3958*chunkYMPRSR53_cjs.a(g)+1962*chunkYMPRSR53_cjs.a(r-u)+318*chunkYMPRSR53_cjs.a(q),M=M-2235*chunkYMPRSR53_cjs.a(r)+382*chunkYMPRSR53_cjs.a(v)+175*chunkYMPRSR53_cjs.a(g-u)+175*chunkYMPRSR53_cjs.a(g+u)+127*chunkYMPRSR53_cjs.a(r-l)-115*chunkYMPRSR53_cjs.a(r+l);let w=chunkYMPRSR53_cjs.g(r+A/1e6),D=M/1e6,H=385000.56+L/1e3,f=w+B,S=chunkYMPRSR53_cjs.g(chunkYMPRSR53_cjs.f(chunkYMPRSR53_cjs.a(f)*chunkYMPRSR53_cjs.b(i)-chunkYMPRSR53_cjs.c(D)*chunkYMPRSR53_cjs.a(i),chunkYMPRSR53_cjs.b(f))),y=chunkYMPRSR53_cjs.d(chunkYMPRSR53_cjs.a(D)*chunkYMPRSR53_cjs.b(i)+chunkYMPRSR53_cjs.b(D)*chunkYMPRSR53_cjs.a(i)*chunkYMPRSR53_cjs.a(f)),z=3600*chunkYMPRSR53_cjs.d(6378.14/H),I=3600*chunkYMPRSR53_cjs.d(1738/H),C=f-N,J=100*(1-chunkYMPRSR53_cjs.b(C))/2,G=chunkYMPRSR53_cjs.g(C);return {RA:S,DEC:y,GHA:chunkYMPRSR53_cjs.g(F-S),SHA:chunkYMPRSR53_cjs.g(360-S),SD:I,HP:z,illumination:k(10*J)/10,isWaxing:G>0&&G<180,distance:H}}exports.a=X;//# sourceMappingURL=chunk-BJ45B342.cjs.map
2
+ //# sourceMappingURL=chunk-BJ45B342.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/astronomy/moon.ts"],"names":["MOON_TERMS","LAT_TERMS","calculateMoon","jd","TE","deltaPsi","eps","GHAAtrue","sunLambda","sunRA","sunDec","abs","round","Lmoon_mean","norm360","D","Msun_mean","Mmoon_mean","F","A1","A2","A3","fE","fE2","sumL","sumR","i","term","f","msAbs","arg","sind","cosd","sumB","lambdaM","betaM","dEM","lambdaMapp","RA","atan2d","tand","DEC","asind","HP","SD","phaseAngle","illumination","xMoon"],"mappings":"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","file":"chunk-BJ45B342.cjs","sourcesContent":["/**\n * High-precision Lunar Ephemeris calculations.\n * Based on Meeus, Astronomical Algorithms.\n */\nimport { atan2d, cosd, norm360, sind, tand, asind } from '../core/math.js';\n\nexport interface MoonResult {\n RA: number;\n DEC: number;\n GHA: number;\n SHA: number;\n SD: number;\n HP: number;\n illumination: number; // Percentage\n isWaxing: boolean;\n distance: number; // Earth-Moon distance in km\n}\n\n// Optimized numerical representation of the moon terms to reduce bundle size and parsing overhead.\nconst MOON_TERMS = [\n [0, 0, 1, 0, 6288774, -20905355],\n [2, 0, -1, 0, 1274027, -3699111],\n [2, 0, 0, 0, 658314, -2955968],\n [0, 0, 2, 0, 213618, -569925],\n [0, 1, 0, 0, -185116, 48888],\n [0, 0, 0, 2, -114332, -3149],\n [2, 0, -2, 0, 58793, 246158],\n [2, -1, -1, 0, 57066, -152138],\n [2, 0, 1, 0, 53322, -170733],\n [2, -1, 0, 0, 45758, -204586],\n [0, 1, -1, 0, -40923, -129620],\n [1, 0, 0, 0, -34720, 108743],\n [0, 1, 1, 0, -30383, 104755],\n [2, 0, 0, -2, 15327, 10321],\n [0, 0, 1, 2, -12528, 0],\n [0, 0, 1, -2, 10980, 79661],\n [4, 0, -1, 0, 10675, -34782],\n [0, 0, 3, 0, 10034, -23210],\n [4, 0, -2, 0, 8548, -21636],\n [2, 1, -1, 0, -7888, 24208],\n [2, 1, 0, 0, -6766, 30824],\n [1, 0, -1, 0, -5163, -8379],\n [1, 1, 0, 0, 4987, -16675],\n [2, -1, 1, 0, 4036, -12831],\n [2, 0, 2, 0, 3994, -10445],\n [4, 0, 0, 0, 3861, -11650],\n [2, 0, -3, 0, 3665, 14403],\n [0, 1, -2, 0, -2689, -7003],\n [2, 0, -1, 2, -2602, 0],\n [2, -1, -2, 0, 2390, 10056],\n [1, 0, 1, 0, -2348, 6322],\n [2, -2, 0, 0, 2236, -9884],\n [0, 1, 2, 0, -2120, 5751],\n [0, 2, 0, 0, -2069, 0],\n [2, -2, -1, 0, 2048, -4950],\n [2, 0, 1, -2, -1773, 4130],\n [2, 0, 0, 2, -1595, 0],\n [4, -1, -1, 0, 1215, -3958],\n [0, 0, 2, 2, -1110, 0],\n [3, 0, -1, 0, -892, 3258],\n [2, 1, 1, 0, -810, 2616],\n [4, -1, -2, 0, 759, -1897],\n [0, 2, -1, 0, -713, -2117],\n [2, 2, -1, 0, -700, 2354],\n [2, 1, -2, 0, 691, 0],\n [2, -1, 0, -2, 596, 0],\n [4, 0, 1, 0, 549, -1423],\n [0, 0, 4, 0, 537, -1117],\n [4, -1, 0, 0, 520, -1571],\n [1, 0, -2, 0, -487, -1739],\n [2, 1, 0, -2, -399, 0],\n [0, 0, 2, -2, -381, -4421],\n [1, 1, 1, 0, 351, 0],\n [3, 0, -2, 0, -340, 0],\n [4, 0, -3, 0, 330, 0],\n [2, -1, 2, 0, 327, 0],\n [0, 2, 1, 0, -323, 1165],\n [1, 1, -1, 0, 299, 0],\n [2, 0, 3, 0, 294, 0],\n [2, 0, -1, -2, 0, 8752]\n];\n\nconst LAT_TERMS = [\n [0, 0, 0, 1, 5128122],\n [0, 0, 1, 1, 280602],\n [0, 0, 1, -1, 277693],\n [2, 0, 0, -1, 173237],\n [2, 0, -1, 1, 55413],\n [2, 0, -1, -1, 46271],\n [2, 0, 0, 1, 32573],\n [0, 0, 2, 1, 17198],\n [2, 0, 1, -1, 9266],\n [0, 0, 2, -1, 8822],\n [2, -1, 0, -1, 8216],\n [2, 0, -2, -1, 4324],\n [2, 0, 1, 1, 4200],\n [2, 1, 0, -1, -3359],\n [2, -1, -1, 1, 2463],\n [2, -1, 0, 1, 2211],\n [2, -1, -1, -1, 2065],\n [0, 1, -1, -1, -1870],\n [4, 0, -1, -1, 1828],\n [0, 1, 0, 1, -1794],\n [0, 0, 0, 3, -1749],\n [0, 1, -1, 1, -1565],\n [1, 0, 0, 1, -1491],\n [0, 1, 1, 1, -1475],\n [0, 1, 1, -1, -1410],\n [0, 1, 0, -1, -1344],\n [1, 0, 0, -1, -1335],\n [0, 0, 3, 1, 1107],\n [4, 0, 0, -1, 1021],\n [4, 0, -1, 1, 833],\n [0, 0, 1, -3, 777],\n [4, 0, -2, 1, 671],\n [2, 0, 0, -3, 607],\n [2, 0, 2, -1, 596],\n [2, -1, 1, -1, 491],\n [2, 0, -2, 1, -451],\n [0, 0, 3, -1, 439],\n [2, 0, 2, 1, 422],\n [2, 0, -3, -1, 421],\n [2, 1, -1, 1, -366],\n [2, 1, 0, 1, -351],\n [4, 0, 0, 1, 331],\n [2, -1, 1, 1, 315],\n [2, -2, 0, -1, 302],\n [0, 0, 1, 3, -283],\n [2, 1, 1, -1, -229],\n [1, 1, 0, -1, 223],\n [1, 1, 0, 1, 223],\n [0, 1, -2, -1, -220],\n [2, 1, -1, -1, -220],\n [1, 0, 1, 1, -185],\n [2, -1, -2, -1, 181],\n [0, 1, 2, 1, -177],\n [4, 0, -2, -1, 176],\n [4, -1, -1, -1, 166],\n [1, 0, 1, -1, -164],\n [4, 0, 1, -1, 132],\n [1, 0, -1, -1, -119],\n [4, -1, 0, -1, 115],\n [2, -2, 0, 1, 107]\n];\n\nexport function calculateMoon(jd: number, TE: number, deltaPsi: number, eps: number, GHAAtrue: number, sunLambda: number, sunRA: number, sunDec: number): MoonResult {\n const { abs, round } = Math;\n\n const Lmoon_mean = norm360(218.3164591 + 481267.88134236 * TE - 0.0013268 * TE * TE + TE * TE * TE / 538841 - TE * TE * TE * TE / 65194000);\n const D = norm360(297.8502042 + 445267.1115168 * TE - 0.00163 * TE * TE + TE * TE * TE / 545868 - TE * TE * TE * TE / 113065000);\n const Msun_mean = norm360(357.5291092 + 35999.0502909 * TE - 0.0001536 * TE * TE + TE * TE * TE / 24490000);\n const Mmoon_mean = norm360(134.9634114 + 477198.8676313 * TE + 0.008997 * TE * TE + TE * TE * TE / 69699 - TE * TE * TE * TE / 14712000);\n const F = norm360(93.2720993 + 483202.0175273 * TE - 0.0034029 * TE * TE - TE * TE * TE / 3526000 + TE * TE * TE * TE / 863310000);\n\n const A1 = norm360(119.75 + 131.849 * TE);\n const A2 = norm360(53.09 + 479264.29 * TE);\n const A3 = norm360(313.45 + 481266.484 * TE);\n\n const fE = 1 - 0.002516 * TE - 0.0000074 * TE * TE;\n const fE2 = fE * fE;\n\n let sumL = 0;\n let sumR = 0;\n\n for (let i = 0; i < MOON_TERMS.length; i++) {\n const term = MOON_TERMS[i];\n let f = 1;\n const msAbs = abs(term[1]);\n if (msAbs === 1) f = fE;\n else if (msAbs === 2) f = fE2;\n \n const arg = term[0] * D + term[1] * Msun_mean + term[2] * Mmoon_mean + term[3] * F;\n sumL += f * term[4] * sind(arg);\n sumR += f * term[5] * cosd(arg);\n }\n\n let sumB = 0;\n for (let i = 0; i < LAT_TERMS.length; i++) {\n const term = LAT_TERMS[i];\n let f = 1;\n const msAbs = abs(term[1]);\n if (msAbs === 1) f = fE;\n else if (msAbs === 2) f = fE2;\n \n const arg = term[0] * D + term[1] * Msun_mean + term[2] * Mmoon_mean + term[3] * F;\n sumB += f * term[4] * sind(arg);\n }\n\n sumL = sumL + 3958 * sind(A1) + 1962 * sind(Lmoon_mean - F) + 318 * sind(A2);\n sumB = sumB - 2235 * sind(Lmoon_mean) + 382 * sind(A3) + 175 * sind(A1 - F) + 175 * sind(A1 + F) + 127 * sind(Lmoon_mean - Mmoon_mean) - 115 * sind(Lmoon_mean + Mmoon_mean);\n\n const lambdaM = norm360(Lmoon_mean + sumL / 1000000);\n const betaM = sumB / 1000000;\n const dEM = 385000.56 + sumR / 1000;\n\n const lambdaMapp = lambdaM + deltaPsi;\n const RA = norm360(atan2d((sind(lambdaMapp) * cosd(eps) - tand(betaM) * sind(eps)), cosd(lambdaMapp)));\n const DEC = asind(sind(betaM) * cosd(eps) + cosd(betaM) * sind(eps) * sind(lambdaMapp));\n const HP = 3600 * asind(6378.14 / dEM);\n const SD = 3600 * asind(1738 / dEM);\n\n const phaseAngle = lambdaMapp - sunLambda;\n const illumination = 100 * (1 - cosd(phaseAngle)) / 2;\n const xMoon = norm360(phaseAngle);\n\n return { \n RA, DEC, \n GHA: norm360(GHAAtrue - RA), \n SHA: norm360(360 - RA), \n SD, HP, \n illumination: round(10 * illumination) / 10, \n isWaxing: (xMoon > 0 && xMoon < 180), \n distance: dEM \n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ function u(r,n=10,e=1010){if(r<0)return 0;let t=(r+7.31/(r+4.4))*(Math.PI/180),o=1/Math.tan(t),c=e/1010,i=283.15/(n+273.15);return o*c*i}export{u as a};//# sourceMappingURL=chunk-CSU6AEKX.js.map
2
+ //# sourceMappingURL=chunk-CSU6AEKX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/astronomy/refraction.ts"],"names":["getRefraction","apparentAltitudeDeg","temperatureC","pressureMbar","interiorAngleRad","baseRefractionArcminutes","pressureFactor","temperatureFactor"],"mappings":"AAGO,SAASA,EACdC,CAAAA,CACAC,CAAAA,CAAuB,EAAA,CACvBC,CAAAA,CAAuB,KACf,CACR,GAAIF,CAAAA,CAAsB,CAAA,CACxB,OAAO,CAAA,CAIT,IAAMG,CAAAA,CAAAA,CADmBH,CAAAA,CAAsB,MAAQA,CAAAA,CAAsB,GAAA,CAAA,GAChC,IAAA,CAAK,EAAA,CAAK,KAEjDI,CAAAA,CAA2B,CAAA,CAAI,IAAA,CAAK,GAAA,CAAID,CAAgB,CAAA,CAExDE,CAAAA,CAAiBH,CAAAA,CAAe,IAAA,CAChCI,EAAoB,MAAA,EAAUL,CAAAA,CAAe,QAEnD,OAAOG,CAAAA,CAA2BC,EAAiBC,CACrD","file":"chunk-CSU6AEKX.js","sourcesContent":["/**\n * Calculates the astronomical atmospheric refraction correction using Bennett's Formula (1982).\n */\nexport function getRefraction(\n apparentAltitudeDeg: number,\n temperatureC: number = 10,\n pressureMbar: number = 1010.0\n): number {\n if (apparentAltitudeDeg < 0) {\n return 0;\n }\n\n const interiorAngleDeg = apparentAltitudeDeg + 7.31 / (apparentAltitudeDeg + 4.4);\n const interiorAngleRad = interiorAngleDeg * (Math.PI / 180);\n\n const baseRefractionArcminutes = 1 / Math.tan(interiorAngleRad);\n\n const pressureFactor = pressureMbar / 1010.0;\n const temperatureFactor = 283.15 / (temperatureC + 273.15);\n\n return baseRefractionArcminutes * pressureFactor * temperatureFactor;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ var u=e=>({success:true,data:e}),t=e=>({success:false,error:e}),n=(e,r,s)=>e<-90||e>90?t(`Invalid latitude: ${e}`):r<-180||r>180?t(`Invalid longitude: ${r}`):s&&isNaN(s.getTime())?t("Invalid date"):u(void 0);export{u as a,t as b,n as c};//# sourceMappingURL=chunk-DJ357A47.js.map
2
+ //# sourceMappingURL=chunk-DJ357A47.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/result.ts"],"names":["Success","data","Failure","error","validateInputs","lat","lng","date"],"mappings":"AAOO,IAAMA,CAAAA,CAAcC,IAClB,CAAE,OAAA,CAAS,KAAM,IAAA,CAAAA,CAAK,CAAA,CAAA,CAGlBC,CAAAA,CAAcC,CAAAA,GAClB,CAAE,QAAS,KAAA,CAAO,KAAA,CAAAA,CAAM,CAAA,CAAA,CAMpBC,CAAAA,CAAiB,CAACC,CAAAA,CAAaC,CAAAA,CAAaC,CAAAA,GACnDF,CAAAA,CAAM,GAAA,EAAOA,CAAAA,CAAM,GAAWH,CAAAA,CAAQ,CAAA,kBAAA,EAAqBG,CAAG,CAAA,CAAE,CAAA,CAChEC,EAAM,IAAA,EAAQA,CAAAA,CAAM,GAAA,CAAYJ,CAAAA,CAAQ,CAAA,mBAAA,EAAsBI,CAAG,EAAE,CAAA,CACnEC,CAAAA,EAAQ,KAAA,CAAMA,CAAAA,CAAK,OAAA,EAAS,EAAUL,CAAAA,CAAQ,cAAc,CAAA,CACzDF,CAAAA,CAAQ,MAAS","file":"chunk-DJ357A47.js","sourcesContent":["/**\n * Result type for robust error handling.\n */\nexport type Result<T, E = string> = \n | { success: true; data: T }\n | { success: false; error: E };\n\nexport const Success = <T>(data: T): Result<T, never> => {\n return { success: true, data };\n};\n\nexport const Failure = <E>(error: E): Result<never, E> => {\n return { success: false, error };\n};\n\n/**\n * Validates coordinates and dates.\n */\nexport const validateInputs = (lat: number, lng: number, date?: Date): Result<void> => {\n if (lat < -90 || lat > 90) return Failure(`Invalid latitude: ${lat}`);\n if (lng < -180 || lng > 180) return Failure(`Invalid longitude: ${lng}`);\n if (date && isNaN(date.getTime())) return Failure('Invalid date');\n return Success(undefined);\n};\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkH33IJIM5_cjs=require('./chunk-H33IJIM5.cjs'),chunkYSOESZ35_cjs=require('./chunk-YSOESZ35.cjs'),chunkYDSVFKVM_cjs=require('./chunk-YDSVFKVM.cjs'),chunkYMPRSR53_cjs=require('./chunk-YMPRSR53.cjs'),chunkYZUP33VG_cjs=require('./chunk-YZUP33VG.cjs'),chunk4JQOEJI5_cjs=require('./chunk-4JQOEJI5.cjs');var Y=(y,f="Karachi")=>{let o=y,C=f,m=(e,t)=>{let s=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),0,0,0));if(isNaN(t))return new Date(NaN);let n=Math.round(t*3600);return s.setUTCSeconds(n),s},u=e=>{let t=chunkYDSVFKVM_cjs.a(e),a=(t+70/86400-2451545)/36525,i=(t-2451545)/36525,r=.1*a,c=chunkYMPRSR53_cjs.h(a);return {solar:chunkYMPRSR53_cjs.i(t,c.deltaPsi,c.eps,a,r,i),jd:t}},R=e=>{let t=12-o.longitude/15;for(let s=0;s<3;s++){let n=m(e,t),{solar:a}=u(n);t=12-o.longitude/15-a.EOT/60;}return m(e,t)},T=(e,t,s)=>{let n=s==="morning"?6:18,a=n;for(let i=0;i<5;i++){let r=m(e,a),{solar:c}=u(r),l=chunkYMPRSR53_cjs.b(o.latitude)*chunkYMPRSR53_cjs.b(c.DEC);if(Math.abs(l)<1e-10)return new Date(NaN);let g=(chunkYMPRSR53_cjs.a(-t)-chunkYMPRSR53_cjs.a(o.latitude)*chunkYMPRSR53_cjs.a(c.DEC))/l;if(g>1||g<-1)return new Date(NaN);let p=chunkYMPRSR53_cjs.e(g)/15,h=12-o.longitude/15-c.EOT/60;if(a=s==="morning"?h-p:h+p,Math.abs(a-n)*3600<1)break;n=a;}return m(e,a)},d=(e,t)=>{let s=t==="morning"?6:18,n=s;for(let a=0;a<5;a++){let i=m(e,n),{solar:r}=u(i),c=34/60,l=r.SD/3600,g=r.HP/3600,p=o.elevation||0,h=.02933333*Math.sqrt(p),U=90+c+l-g+h,I=chunkYMPRSR53_cjs.b(o.latitude)*chunkYMPRSR53_cjs.b(r.DEC);if(Math.abs(I)<1e-10)return new Date(NaN);let N=(chunkYMPRSR53_cjs.b(U)-chunkYMPRSR53_cjs.a(o.latitude)*chunkYMPRSR53_cjs.a(r.DEC))/I;if(N>1||N<-1)return new Date(NaN);let w=chunkYMPRSR53_cjs.e(N)/15,M=12-o.longitude/15-r.EOT/60;if(n=t==="morning"?M-w:M+w,Math.abs(n-s)*3600<1)break;s=n;}return m(e,n)},b=(e,t,s,n,a)=>{let{solar:i}=u(s),r=Math.abs(o.latitude-i.DEC),c=i.SD/3600,l=chunkYSOESZ35_cjs.a(90-r,n,a)/60,g=r-l-c,p=15,h=p;for(let U=0;U<5;U++){let I=m(e,h),{solar:N}=u(I),w=chunkYMPRSR53_cjs.f(chunkYMPRSR53_cjs.c(g)+t,1),M=chunkYSOESZ35_cjs.a(90-w,n,a)/60,k=N.SD/3600,Z=w+M+k,v=chunkYMPRSR53_cjs.b(o.latitude)*chunkYMPRSR53_cjs.b(N.DEC);if(Math.abs(v)<1e-10)return new Date(NaN);let P=(chunkYMPRSR53_cjs.b(Z)-chunkYMPRSR53_cjs.a(o.latitude)*chunkYMPRSR53_cjs.a(N.DEC))/v;if(P>1||P<-1)return new Date(NaN);let H=chunkYMPRSR53_cjs.e(P)/15;if(h=12-o.longitude/15-N.EOT/60+H,Math.abs(h-p)*3600<1)break;p=h;}return m(e,h)};return {calculate:(e,t=2,s=10,n=1010,a)=>{try{let i=R(e),r=chunkH33IJIM5_cjs.a[C],c=T(e,r.fajrAngle,"morning"),l=d(e,"morning"),g=r.maghribInterval?new Date(l.getTime()+r.maghribInterval*6e4):r.maghribAngle?T(e,r.maghribAngle,"evening"):d(e,"evening"),p=a!==void 0?a:r.ishaAngle||18,h=r.ishaInterval?new Date(g.getTime()+r.ishaInterval*6e4):T(e,p,"evening"),U=b(e,t,i,s,n),I=isNaN(c.getTime())||isNaN(g.getTime())?new Date(NaN):new Date((c.getTime()+g.getTime())/2),N={fajr:c,sunrise:l,dhahwaKubra:I,dhuhr:i,asr:U,maghrib:g,isha:h,format(w,M){let k={},Z=["fajr","sunrise","dhahwaKubra","dhuhr","asr","maghrib","isha"];for(let v of Z){let P=this[v];if(!P||isNaN(P.getTime())){k[v]=w==="unix"?NaN:"Invalid Date";continue}if(w==="iso8601")k[v]=P.toISOString();else if(w==="unix")k[v]=Math.floor(P.getTime()/1e3);else {let H={hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:w==="12h"};M&&(H.timeZone=M),k[v]=new Intl.DateTimeFormat("en-US",H).format(P);}}return k}};return isNaN(c.getTime())||isNaN(i.getTime())||isNaN(g.getTime())?chunkYZUP33VG_cjs.b("One or more prayer times could not be calculated (Extreme latitude or invalid date)."):chunkYZUP33VG_cjs.a(N)}catch(i){return chunkYZUP33VG_cjs.b(i instanceof Error?i.message:"Unknown calculation error")}}}};var F=y=>{var s,n;let{location:f,date:o=new Date,method:C="Karachi",madhab:m="Hanafi",elevation:u=(n=(s=y.location)==null?void 0:s.elevation)!=null?n:0,temperature:R=10,pressure:T=1013.25,adjustments:d={}}=y;if(!f)return chunkYZUP33VG_cjs.b("Location is required");let b=chunkYZUP33VG_cjs.c(f.latitude,f.longitude,o);if(!b.success)return b;let e=m==="Hanafi"?2:1,t=m==="Hanafi"?18:12;try{let i=Y(chunk4JQOEJI5_cjs.c(chunk4JQOEJI5_cjs.b({},f),{elevation:u}),C).calculate(o,e,R,T,t);if(i.success&&Object.keys(d).length>0){let r=i.data,c=["fajr","sunrise","dhahwaKubra","dhuhr","asr","maghrib","isha"];for(let l of c)d[l]&&!isNaN(r[l].getTime())&&(r[l]=new Date(r[l].getTime()+d[l]*6e4));}return i}catch(a){return chunkYZUP33VG_cjs.b(a instanceof Error?a.message:"Unknown error during calculation")}};function B(y,f,o){let C=[],m=new Date(y,f,0).getDate();for(let u=1;u<=m;u++){let R=new Date(y,f-1,u),T=F(chunk4JQOEJI5_cjs.c(chunk4JQOEJI5_cjs.b({},o),{date:R}));if(!T.success)return chunkYZUP33VG_cjs.b(`Failed to calculate times for day ${u}: ${T.error}`);let d=T.data;C.push(chunk4JQOEJI5_cjs.c(chunk4JQOEJI5_cjs.b({},d),{date:R.toLocaleDateString(),day:u,weekday:R.toLocaleDateString("en-US",{weekday:"long"})}));}return chunkYZUP33VG_cjs.a(C)}function G(y,f,o,C=0,m=0){let u=[],R=Math.abs(f.getTime()-y.getTime());if(Math.ceil(R/(1e3*60*60*24))>31)return chunkYZUP33VG_cjs.b("Date range cannot exceed 31 days.");let d=new Date(y);for(;d<=f;){let b=new Date(d),e=F(chunk4JQOEJI5_cjs.c(chunk4JQOEJI5_cjs.b({},o),{date:b}));if(!e.success)return chunkYZUP33VG_cjs.b(`Failed to calculate times for ${b.toLocaleDateString()}: ${e.error}`);let t=e.data;u.push({date:b.toLocaleDateString(),day:b.getDate(),weekday:b.toLocaleDateString("en-US",{weekday:"long"}),fajr:t.fajr,maghrib:t.maghrib,sahurEndsAt:new Date(t.fajr.getTime()-C*6e4),iftarAt:new Date(t.maghrib.getTime()+m*6e4)}),d.setDate(d.getDate()+1);}return chunkYZUP33VG_cjs.a(u)}exports.a=Y;exports.b=F;exports.c=B;exports.d=G;//# sourceMappingURL=chunk-E4M4MYZR.cjs.map
2
+ //# sourceMappingURL=chunk-E4M4MYZR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/prayer/engine.ts","../src/prayer/calculate.ts","../src/prayer/monthly.ts","../src/prayer/ramadan.ts"],"names":["createPrayerEngine","coords","method","_coords","_method","toDate","baseDate","utcHours","d","totalSeconds","getSolarAt","date","jd","getJulianDate","te","t","tau","nut","calculateNutation","calculateSolar","calculateTransit","currentUtcTime","i","checkDate","solar","solveIteratively","angleBelowHorizon","side","prevTime","denominator","cosd","cosH","sind","H","acosd","transit","solvePhenomenonIteratively","refraction","sd_deg","hp_deg","elevation","dip","targetZenith","solveAsrIteratively","factor","dhuhr","temperature","pressureMbar","solarZuhr","zZuhr","sdZuhr","refrZuhr","getRefraction","zZuhrVisual","zAsrVisual","atan2d","tand","refrAsr","sdAsr","asrFactor","ishaAngleOverride","params","PRESETS","fajr","sunrise","maghrib","ishaAngle","isha","asr","dhahwaKubra","results","type","timeZone","formatted","keys","key","options","Failure","Success","e","getPrayerTimes","config","_a","_b","location","madhab","pressure","adjustments","validation","validateInputs","result","__spreadProps","__spreadValues","times","getMonthlyPrayerTimes","year","month","daysInMonth","day","timesResult","getRamadanSchedule","startDate","endDate","sahurBuffer","iftarBuffer","diffTime","current"],"mappings":"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","file":"chunk-E4M4MYZR.cjs","sourcesContent":["/**\n * Core Prayer Time Engine.\n * Following strictly defined Successive Approximation Algorithmic Workflow.\n * Modularized and encapsulated using closures for privacy and small footprint.\n */\nimport { acosd, sind, cosd, tand, atan2d } from '../core/math.js';\nimport { getRefraction } from '../astronomy/refraction.js';\nimport { getJulianDate } from '../core/time.js';\nimport { calculateNutation } from '../astronomy/nutation.js';\nimport { calculateSolar, SolarResult } from '../astronomy/solar.js';\nimport { Coordinates, CalculationMethod, PrayerTimesResult } from './types/index.js';\nimport { PRESETS } from './constants/methods.js';\nimport { Result, Success, Failure } from '../core/result.js';\n\n/**\n * Creates a prayer engine instance.\n * @param coords Observer coordinates.\n * @param method Calculation method preset.\n */\nexport const createPrayerEngine = (coords: Coordinates, method: CalculationMethod = 'Karachi') => {\n // Private variables via closure\n const _coords = coords;\n const _method = method;\n\n /**\n * Internal helper to convert UTC hours to a Date object.\n */\n const toDate = (baseDate: Date, utcHours: number): Date => {\n const d = new Date(Date.UTC(baseDate.getUTCFullYear(), baseDate.getUTCMonth(), baseDate.getUTCDate(), 0, 0, 0));\n if (isNaN(utcHours)) return new Date(NaN);\n const totalSeconds = Math.round(utcHours * 3600);\n d.setUTCSeconds(totalSeconds);\n return d;\n };\n\n /**\n * Internal helper to get solar ephemeris at a specific date.\n */\n const getSolarAt = (date: Date): { solar: SolarResult, jd: number } => {\n const jd = getJulianDate(date);\n const dt = 70; // Fixed ΔT as requested in original logic\n const jde = jd + dt / 86400;\n const te = (jde - 2451545) / 36525;\n const t = (jd - 2451545) / 36525;\n const tau = 0.1 * te;\n const nut = calculateNutation(te);\n const solar = calculateSolar(jd, nut.deltaPsi, nut.eps, te, tau, t);\n return { solar, jd };\n };\n\n /**\n * Solves for solar transit (Noon).\n */\n const calculateTransit = (date: Date): Date => {\n let currentUtcTime = 12 - (_coords.longitude / 15);\n for (let i = 0; i < 3; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n currentUtcTime = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n }\n return toDate(date, currentUtcTime);\n };\n\n /**\n * Solves iteratively for a target zenith angle.\n */\n const solveIteratively = (date: Date, angleBelowHorizon: number, side: 'morning' | 'evening'): Date => {\n let prevTime = side === 'morning' ? 6 : 18;\n let currentUtcTime = prevTime;\n\n for (let i = 0; i < 5; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n const denominator = cosd(_coords.latitude) * cosd(solar.DEC);\n\n if (Math.abs(denominator) < 1e-10) return new Date(NaN);\n\n const cosH = (sind(-angleBelowHorizon) - sind(_coords.latitude) * sind(solar.DEC)) / denominator;\n if (cosH > 1 || cosH < -1) return new Date(NaN);\n\n const H = acosd(cosH) / 15;\n const transit = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n currentUtcTime = side === 'morning' ? transit - H : transit + H;\n\n if (Math.abs(currentUtcTime - prevTime) * 3600 < 1) break;\n prevTime = currentUtcTime;\n }\n return toDate(date, currentUtcTime);\n };\n\n /**\n * Solves iteratively for Sunrise/Maghrib (with refraction and SD).\n */\n const solvePhenomenonIteratively = (date: Date, side: 'morning' | 'evening'): Date => {\n let prevTime = side === 'morning' ? 6 : 18;\n let currentUtcTime = prevTime;\n\n for (let i = 0; i < 5; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n const refraction = 34 / 60;\n const sd_deg = solar.SD / 3600;\n const hp_deg = solar.HP / 3600;\n const elevation = _coords.elevation || 0;\n const dip = 0.02933333 * Math.sqrt(elevation);\n\n const targetZenith = 90 + refraction + sd_deg - hp_deg + dip;\n const denominator = cosd(_coords.latitude) * cosd(solar.DEC);\n\n if (Math.abs(denominator) < 1e-10) return new Date(NaN);\n\n const cosH = (cosd(targetZenith) - sind(_coords.latitude) * sind(solar.DEC)) / denominator;\n if (cosH > 1 || cosH < -1) return new Date(NaN);\n\n const H = acosd(cosH) / 15;\n const transit = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n currentUtcTime = side === 'morning' ? transit - H : transit + H;\n\n if (Math.abs(currentUtcTime - prevTime) * 3600 < 1) break;\n prevTime = currentUtcTime;\n }\n return toDate(date, currentUtcTime);\n };\n\n /**\n * Solves iteratively for Asr.\n */\n const solveAsrIteratively = (date: Date, factor: number, dhuhr: Date, temperature: number, pressureMbar: number): Date => {\n const { solar: solarZuhr } = getSolarAt(dhuhr);\n const zZuhr = Math.abs(_coords.latitude - solarZuhr.DEC);\n const sdZuhr = solarZuhr.SD / 3600;\n const refrZuhr = getRefraction(90 - zZuhr, temperature, pressureMbar) / 60;\n const zZuhrVisual = zZuhr - refrZuhr - sdZuhr;\n\n let prevTime = 15;\n let currentUtcTime = prevTime;\n\n for (let i = 0; i < 5; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n const zAsrVisual = atan2d(tand(zZuhrVisual) + factor, 1);\n const refrAsr = getRefraction(90 - zAsrVisual, temperature, pressureMbar) / 60;\n const sdAsr = solar.SD / 3600;\n const targetZenith = zAsrVisual + refrAsr + sdAsr;\n\n const denominator = cosd(_coords.latitude) * cosd(solar.DEC);\n if (Math.abs(denominator) < 1e-10) return new Date(NaN);\n\n const cosH = (cosd(targetZenith) - sind(_coords.latitude) * sind(solar.DEC)) / denominator;\n if (cosH > 1 || cosH < -1) return new Date(NaN);\n\n const H = acosd(cosH) / 15;\n const transit = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n currentUtcTime = transit + H;\n\n if (Math.abs(currentUtcTime - prevTime) * 3600 < 1) break;\n prevTime = currentUtcTime;\n }\n return toDate(date, currentUtcTime);\n };\n\n // Exposed API\n return {\n calculate: (\n date: Date,\n asrFactor: number = 2,\n temperature: number = 10,\n pressureMbar: number = 1010.0,\n ishaAngleOverride?: number\n ): Result<PrayerTimesResult> => {\n try {\n const dhuhr = calculateTransit(date);\n const params = PRESETS[_method];\n\n const fajr = solveIteratively(date, params.fajrAngle, 'morning');\n const sunrise = solvePhenomenonIteratively(date, 'morning');\n\n const maghrib = params.maghribInterval\n ? new Date(sunrise.getTime() + params.maghribInterval * 60000)\n : params.maghribAngle\n ? solveIteratively(date, params.maghribAngle, 'evening')\n : solvePhenomenonIteratively(date, 'evening');\n\n const ishaAngle = ishaAngleOverride !== undefined ? ishaAngleOverride : (params.ishaAngle || 18);\n const isha = params.ishaInterval\n ? new Date(maghrib.getTime() + params.ishaInterval * 60000)\n : solveIteratively(date, ishaAngle, 'evening');\n\n const asr = solveAsrIteratively(date, asrFactor, dhuhr, temperature, pressureMbar);\n \n const dhahwaKubra = (isNaN(fajr.getTime()) || isNaN(maghrib.getTime()))\n ? new Date(NaN)\n : new Date((fajr.getTime() + maghrib.getTime()) / 2);\n\n const results: PrayerTimesResult = { \n fajr, sunrise, dhahwaKubra, dhuhr, asr, maghrib, isha,\n format(type: 'iso8601' | 'unix' | '12h' | '24h', timeZone?: string) {\n const formatted: Record<string, string | number> = {};\n const keys: (keyof Omit<PrayerTimesResult, 'format'>)[] = ['fajr', 'sunrise', 'dhahwaKubra', 'dhuhr', 'asr', 'maghrib', 'isha'];\n \n for (const key of keys) {\n const d = this[key];\n if (!d || isNaN(d.getTime())) {\n formatted[key] = type === 'unix' ? NaN : 'Invalid Date';\n continue;\n }\n\n if (type === 'iso8601') {\n formatted[key] = d.toISOString();\n } else if (type === 'unix') {\n formatted[key] = Math.floor(d.getTime() / 1000);\n } else {\n const options: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: type === '12h'\n };\n if (timeZone) {\n options.timeZone = timeZone;\n }\n formatted[key] = new Intl.DateTimeFormat('en-US', options).format(d);\n }\n }\n return formatted as Record<Exclude<keyof PrayerTimesResult, 'format'>, string | number>;\n }\n };\n\n // Verify if any critical time is NaN (e.g. at extreme latitudes)\n if (isNaN(fajr.getTime()) || isNaN(dhuhr.getTime()) || isNaN(maghrib.getTime())) {\n return Failure('One or more prayer times could not be calculated (Extreme latitude or invalid date).');\n }\n\n return Success(results);\n } catch (e) {\n return Failure(e instanceof Error ? e.message : 'Unknown calculation error');\n }\n }\n };\n};\n","import { createPrayerEngine } from './engine.js';\nimport { Coordinates, CalculationMethod, PrayerTimesResult } from './types/index.js';\nimport { Result, validateInputs, Failure } from '../core/result.js';\n\n/**\n * Configuration for prayer time calculations.\n */\nexport interface PrayerConfig {\n /** \n * Observer coordinates. \n * Must include latitude (-90 to 90) and longitude (-180 to 180).\n */\n location: Coordinates;\n \n /** \n * Calculation date. \n * @default new Date() (Today)\n */\n date?: Date;\n \n /** \n * Calculation method preset. \n * Determines Fajr and Isha angles.\n * @default 'Karachi'\n */\n method?: CalculationMethod;\n \n /** \n * Madhab for Asr calculation. \n * 'Hanafi' uses shadow factor 2, 'Shafi' uses factor 1.\n * @default 'Hanafi'\n */\n madhab?: 'Shafi' | 'Hanafi';\n \n /** \n * Elevation in meters above sea level. \n * Influences Sunrise and Maghrib via atmospheric dip.\n * @default 0\n */\n elevation?: number;\n \n /** \n * Ambient temperature in Celsius. \n * Influences atmospheric refraction.\n * @default 10\n */\n temperature?: number;\n \n /** \n * Atmospheric pressure in mbar (hPa). \n * Influences atmospheric refraction.\n * @default 1013.25\n */\n pressure?: number;\n /**\n * Manual minute adjustments for each prayer time.\n * Useful for matching local mosque timings or applying safety margins.\n */\n adjustments?: Partial<Record<Exclude<keyof PrayerTimesResult, 'format'>, number>>;\n}\n\n/**\n * High-level API for calculating prayer times with smart defaults.\n * Follows the Result Pattern to ensure host stability.\n * \n * @example\n * const result = getPrayerTimes({ location: { latitude: 24.86, longitude: 67.01 } });\n * if (result.success) {\n * console.log(result.data.fajr);\n * } else {\n * console.error(result.error);\n * }\n */\nexport const getPrayerTimes = (config: PrayerConfig): Result<PrayerTimesResult> => {\n // Apply smart defaults\n const {\n location,\n date = new Date(),\n method = 'Karachi',\n madhab = 'Hanafi',\n elevation = config.location?.elevation ?? 0,\n temperature = 10,\n pressure = 1013.25,\n adjustments = {}\n } = config;\n\n if (!location) return Failure('Location is required');\n\n // Input Validation: Returns Failure instead of throwing\n const validation = validateInputs(location.latitude, location.longitude, date);\n if (!validation.success) return validation as any;\n\n // Internal Logic Conversions\n const asrFactor = madhab === 'Hanafi' ? 2 : 1;\n const ishaAngle = madhab === 'Hanafi' ? 18 : 12;\n\n try {\n const engine = createPrayerEngine({ ...location, elevation }, method);\n const result = engine.calculate(date, asrFactor, temperature, pressure, ishaAngle);\n \n if (result.success && Object.keys(adjustments).length > 0) {\n const times = result.data;\n const keys = ['fajr', 'sunrise', 'dhahwaKubra', 'dhuhr', 'asr', 'maghrib', 'isha'] as const;\n \n for (const key of keys) {\n if (adjustments[key] && !isNaN(times[key].getTime())) {\n times[key] = new Date(times[key].getTime() + adjustments[key]! * 60000);\n }\n }\n }\n \n return result;\n } catch (e) {\n return Failure(e instanceof Error ? e.message : 'Unknown error during calculation');\n }\n};\n","import { getPrayerTimes, PrayerConfig } from './index.js';\nimport { MonthlyPrayerRow, PrayerTimesResult } from './types/index.js';\nimport { Result, Success, Failure } from '../core/result.js';\n\n/**\n * Calculates prayer times for an entire month.\n */\nexport function getMonthlyPrayerTimes(\n year: number,\n month: number,\n config: Omit<PrayerConfig, 'date'>\n): Result<MonthlyPrayerRow[]> {\n const results: MonthlyPrayerRow[] = [];\n const daysInMonth = new Date(year, month, 0).getDate();\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month - 1, day);\n const timesResult = getPrayerTimes({ ...config, date });\n \n if (!timesResult.success) {\n return Failure(`Failed to calculate times for day ${day}: ${timesResult.error}`);\n }\n\n const times = timesResult.data;\n results.push({\n ...times,\n date: date.toLocaleDateString(),\n day,\n weekday: date.toLocaleDateString('en-US', { weekday: 'long' })\n });\n }\n\n return Success(results);\n}\n","import { getPrayerTimes, PrayerConfig } from './index.js';\nimport { RamadanScheduleEntry } from './types/index.js';\nimport { Result, Success, Failure } from '../core/result.js';\n\n/**\n * Calculates Ramadan schedule (Sahar and Iftar times) for a date range.\n */\nexport function getRamadanSchedule(\n startDate: Date,\n endDate: Date,\n config: Omit<PrayerConfig, 'date'>,\n sahurBuffer: number = 0,\n iftarBuffer: number = 0\n): Result<RamadanScheduleEntry[]> {\n const results: RamadanScheduleEntry[] = [];\n const diffTime = Math.abs(endDate.getTime() - startDate.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays > 31) {\n return Failure('Date range cannot exceed 31 days.');\n }\n\n const current = new Date(startDate);\n while (current <= endDate) {\n const date = new Date(current);\n const timesResult = getPrayerTimes({ ...config, date });\n\n if (!timesResult.success) {\n return Failure(`Failed to calculate times for ${date.toLocaleDateString()}: ${timesResult.error}`);\n }\n\n const times = timesResult.data;\n results.push({\n date: date.toLocaleDateString(),\n day: date.getDate(),\n weekday: date.toLocaleDateString('en-US', { weekday: 'long' }),\n fajr: times.fajr,\n maghrib: times.maghrib,\n sahurEndsAt: new Date(times.fajr.getTime() - sahurBuffer * 60000),\n iftarAt: new Date(times.maghrib.getTime() + iftarBuffer * 60000)\n });\n\n current.setDate(current.getDate() + 1);\n }\n\n return Success(results);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkH33IJIM5_cjs=require('./chunk-H33IJIM5.cjs'),chunkYSOESZ35_cjs=require('./chunk-YSOESZ35.cjs'),chunkYDSVFKVM_cjs=require('./chunk-YDSVFKVM.cjs'),chunkYMPRSR53_cjs=require('./chunk-YMPRSR53.cjs'),chunkYZUP33VG_cjs=require('./chunk-YZUP33VG.cjs'),chunk4JQOEJI5_cjs=require('./chunk-4JQOEJI5.cjs');function V(f,v="Karachi"){let i=f,M=v,u=(t,e)=>{let r=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,0));if(isNaN(e))return new Date(NaN);let n=Math.round(e*3600);return r.setUTCSeconds(n),r},N=t=>{let e=chunkYDSVFKVM_cjs.a(t),n=e+70/86400,a=(e-2451545)/36525,o=(n-2451545)/36525,s=.1*o,c=chunkYMPRSR53_cjs.h(o);return {solar:chunkYMPRSR53_cjs.i(e,c.deltaPsi,c.eps,o,s,a),jd:e}},p=t=>{let e=12-i.longitude/15;for(let r=0;r<3;r++){let n=u(t,e),{solar:a}=N(n);e=12-i.longitude/15-a.EOT/60;}return u(t,e)},b=(t,e,r)=>{let n=r==="morning"?6:18,a=n;for(let o=0;o<5;o++){let s=u(t,a),{solar:c}=N(s),m=chunkYMPRSR53_cjs.b(i.latitude)*chunkYMPRSR53_cjs.b(c.DEC);if(Math.abs(m)<1e-10)return new Date(NaN);let d=(chunkYMPRSR53_cjs.a(-e)-chunkYMPRSR53_cjs.a(i.latitude)*chunkYMPRSR53_cjs.a(c.DEC))/m;if(d>1||d<-1)return new Date(NaN);let T=chunkYMPRSR53_cjs.e(d)/15,h=12-i.longitude/15-c.EOT/60;if(a=r==="morning"?h-T:h+T,Math.abs(a-n)*3600<1)break;n=a;}return u(t,a)},R=(t,e)=>{let r=e==="morning"?6:18,n=r;for(let a=0;a<5;a++){let o=u(t,n),{solar:s}=N(o),c=34/60,m=s.SD/3600,d=s.HP/3600,T=i.elevation||0,h=.02933333*Math.sqrt(T),S=90+c+m-d+h,P=chunkYMPRSR53_cjs.b(i.latitude)*chunkYMPRSR53_cjs.b(s.DEC);if(Math.abs(P)<1e-10)return new Date(NaN);let D=(chunkYMPRSR53_cjs.b(S)-chunkYMPRSR53_cjs.a(i.latitude)*chunkYMPRSR53_cjs.a(s.DEC))/P;if(D>1||D<-1)return new Date(NaN);let E=chunkYMPRSR53_cjs.e(D)/15,A=12-i.longitude/15-s.EOT/60;if(n=e==="morning"?A-E:A+E,Math.abs(n-r)*3600<1)break;r=n;}return u(t,n)},C=(t,e,r,n,a)=>{let{solar:o}=N(r),s=Math.abs(i.latitude-o.DEC),c=o.SD/3600,m=chunkYSOESZ35_cjs.a(90-s,n,a)/60,d=s-m-c,T=15,h=T;for(let S=0;S<5;S++){let P=u(t,h),{solar:D}=N(P),E=chunkYMPRSR53_cjs.f(chunkYMPRSR53_cjs.c(d)+e,1),A=chunkYSOESZ35_cjs.a(90-E,n,a)/60,L=D.SD/3600,H=E+A+L,x=chunkYMPRSR53_cjs.b(i.latitude)*chunkYMPRSR53_cjs.b(D.DEC);if(Math.abs(x)<1e-10)return new Date(NaN);let k=(chunkYMPRSR53_cjs.b(H)-chunkYMPRSR53_cjs.a(i.latitude)*chunkYMPRSR53_cjs.a(D.DEC))/x;if(k>1||k<-1)return new Date(NaN);let Y=chunkYMPRSR53_cjs.e(k)/15;if(h=12-i.longitude/15-D.EOT/60+Y,Math.abs(h-T)*3600<1)break;T=h;}return u(t,h)};return {calculate:(t,e=2,r=10,n=1010,a)=>{try{let o=p(t),s=chunkH33IJIM5_cjs.a[M],c=b(t,s.fajrAngle,"morning"),m=R(t,"morning"),d=s.maghribInterval?new Date(m.getTime()+s.maghribInterval*6e4):s.maghribAngle?b(t,s.maghribAngle,"evening"):R(t,"evening"),T=a!==void 0?a:s.ishaAngle||18,h=s.ishaInterval?new Date(d.getTime()+s.ishaInterval*6e4):b(t,T,"evening"),S=C(t,e,o,r,n),P=isNaN(c.getTime())||isNaN(d.getTime())?new Date(NaN):new Date((c.getTime()+d.getTime())/2),D={fajr:c,sunrise:m,dhahwaKubra:P,dhuhr:o,asr:S,maghrib:d,isha:h};return isNaN(c.getTime())||isNaN(o.getTime())||isNaN(d.getTime())?chunkYZUP33VG_cjs.b("One or more prayer times could not be calculated for this location/date (astronomical edge case)."):chunkYZUP33VG_cjs.a(D)}catch(o){return chunkYZUP33VG_cjs.b(o instanceof Error?o.message:"Unknown calculation error")}}}}function W(f,v,i){let M=f,u=v,N=i,p=chunkYMPRSR53_cjs.a(M),b=chunkYMPRSR53_cjs.b(M),R=chunkYMPRSR53_cjs.a(u),C=chunkYMPRSR53_cjs.b(u),t=Math.hypot(b,p*chunkYMPRSR53_cjs.b(N));if(t<1e-12)return {angleP:NaN,sideZS:NaN};let e=C/t;e=Math.min(1,Math.max(-1,e));let r=chunkYMPRSR53_cjs.f(p*chunkYMPRSR53_cjs.b(N),b),n=chunkYMPRSR53_cjs.e(e),a=[r+n,r-n].map(chunkYMPRSR53_cjs.g).filter(m=>m>=-1e-12&&m<=180+1e-12);if(a.length===0)return {angleP:NaN,sideZS:NaN};let o=a[0],s=R*p;if(Math.abs(s)<1e-12)return {angleP:NaN,sideZS:NaN};let c=(chunkYMPRSR53_cjs.b(o)-C*b)/s;return c=Math.min(1,Math.max(-1,c)),{angleP:chunkYMPRSR53_cjs.e(c),sideZS:o}}function X(f,v,i=new Date,M=0,u=10,N=1010){let p=chunkYZUP33VG_cjs.c(f,v,i);if(!p.success)return chunkYZUP33VG_cjs.b(p.error);let b=G({latitude:f,longitude:v});if(!b.success)return chunkYZUP33VG_cjs.b(b.error);let R=b.data.bearing,t=V({latitude:f,longitude:v,elevation:M}).calculate(i,2,u,N);if(!t.success)return chunkYZUP33VG_cjs.b(t.error);let e=t.data.dhuhr,r=e.getUTCHours()+e.getUTCMinutes()/60+e.getUTCSeconds()/3600,n=chunkYDSVFKVM_cjs.a(e),a=(n-2451545)/36525,o=chunkYMPRSR53_cjs.h(a),c=chunkYMPRSR53_cjs.i(n,o.deltaPsi,o.eps,a,.1*a,a).DEC,m=90-f,d=90-c,T=[{name:"Qibla",value:0},{name:"Opposite",value:180},{name:"Right",value:90},{name:"Left",value:-90}],h=[];return T.forEach(S=>{let P=chunkYMPRSR53_cjs.g(R+S.value),{angleP:D}=W(m,d,P);if(!isNaN(D)){let E=D/15,A=P>180?r+E:r-E,L=new Date(e),H=Math.floor(A),x=Math.floor((A-H)*60),k=Math.floor(((A-H)*60-x)*60);L.setUTCHours(H,x,k),h.push({direction:S.name,bearing:P,time:L});}}),chunkYZUP33VG_cjs.a(h)}var _=21.422487,q=39.826206;function G(f){let v=chunkYZUP33VG_cjs.c(f.latitude,f.longitude);if(!v.success)return v;let i=f.latitude,M=f.longitude,u=chunkYMPRSR53_cjs.a(q-M),N=chunkYMPRSR53_cjs.b(i)*chunkYMPRSR53_cjs.c(_)-chunkYMPRSR53_cjs.a(i)*chunkYMPRSR53_cjs.b(q-M),p=chunkYMPRSR53_cjs.f(u,N);p<0&&(p+=360);let b=Math.log(chunkYMPRSR53_cjs.c(_/2+45)/chunkYMPRSR53_cjs.c(i/2+45)),R=(q-M)*Math.PI/180,C=chunkYMPRSR53_cjs.f(R,b);C<0&&(C+=360);let t=6371,e=(_-i)*Math.PI/180,r=(q-M)*Math.PI/180,n=chunk4JQOEJI5_cjs.a(Math.sin(e/2),2)+Math.cos(i*Math.PI/180)*Math.cos(_*Math.PI/180)*chunk4JQOEJI5_cjs.a(Math.sin(r/2),2),a=2*Math.atan2(Math.sqrt(n),Math.sqrt(1-n)),o=t*a;return chunkYZUP33VG_cjs.a({bearing:p,rhumbLine:C,distance:o})}exports.a=X;exports.b=G;//# sourceMappingURL=chunk-FQ6RGT3F.cjs.map
2
+ //# sourceMappingURL=chunk-FQ6RGT3F.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/prayer/engine/index.ts","../src/qibla/sun-qibla.ts","../src/qibla/index.ts"],"names":["createPrayerEngine","coords","method","_coords","_method","toDate","baseDate","utcHours","d","totalSeconds","getSolarAt","date","jd","getJulianDate","jde","t","te","tau","nut","calculateNutation","calculateSolar","calculateTransit","currentUtcTime","i","checkDate","solar","solveIteratively","angleBelowHorizon","side","prevTime","denominator","cosd","cosH","sind","H","acosd","transit","solvePhenomenonIteratively","refraction","sd_deg","hp_deg","elevation","dip","targetZenith","solveAsrIteratively","factor","dhuhr","temperature","pressureMbar","solarZuhr","zZuhr","sdZuhr","refrZuhr","getRefraction","zZuhrVisual","zAsrVisual","atan2d","tand","refrAsr","sdAsr","asrFactor","ishaAngleOverride","params","PRESETS","fajr","sunrise","maghrib","ishaAngle","isha","asr","dhahwaKubra","results","Failure","Success","e","calculatePolarAngleP","PZdeg","PSdeg","Zdeg","c","b","B","sinC","cosC","sinBside","cosBside","R","x","alpha","delta","candidateSides","norm360","a","denom","cosP","calculateSunAtQibla","lat","lng","pressure","validation","validateInputs","qiblaResult","calculateQibla","baseDir","prayerTimesResult","zuhrDate","zuhrDecimal","sunDec","PZ","PS","offsets","offset","currentDir","angleP","timeOffset","finalTimeDecimal","time","hours","minutes","seconds","MAKKAH_LAT","MAKKAH_LNG","phi","lambda","y","qibla","dPhi","dLon","rhumb","dLat","dl","__pow","distance"],"mappings":"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","file":"chunk-FQ6RGT3F.cjs","sourcesContent":["/**\n * Core Prayer Time Engine.\n * Following strictly defined Successive Approximation Algorithmic Workflow.\n * Modularized and encapsulated using closures for privacy and small footprint.\n */\nimport { acosd, sind, cosd, tand, atan2d } from '../../core/math.js';\nimport { getRefraction } from '../../astronomy/refraction.js';\nimport { getJulianDate } from '../../core/time.js';\nimport { calculateNutation } from '../../astronomy/nutation.js';\nimport { calculateSolar, SolarResult } from '../../astronomy/solar.js';\nimport { Coordinates, CalculationMethod, PrayerTimesResult } from '../types/index.js';\nimport { PRESETS } from '../constants/methods.js';\nimport { Result, Success, Failure } from '../../core/result.js';\n\n/**\n * Creates a prayer engine instance.\n * @param coords Observer coordinates.\n * @param method Calculation method preset.\n */\nexport function createPrayerEngine(coords: Coordinates, method: CalculationMethod = 'Karachi') {\n // Private variables via closure\n const _coords = coords;\n const _method = method;\n\n /**\n * Internal helper to convert UTC hours to a Date object.\n */\n const toDate = (baseDate: Date, utcHours: number): Date => {\n const d = new Date(Date.UTC(baseDate.getUTCFullYear(), baseDate.getUTCMonth(), baseDate.getUTCDate(), 0, 0, 0));\n if (isNaN(utcHours)) return new Date(NaN);\n const totalSeconds = Math.round(utcHours * 3600);\n d.setUTCSeconds(totalSeconds);\n return d;\n };\n\n /**\n * Internal helper to get solar ephemeris at a specific date.\n */\n const getSolarAt = (date: Date): { solar: SolarResult, jd: number } => {\n const jd = getJulianDate(date);\n const dt = 70; // Fixed ΔT as requested in original logic\n const jde = jd + dt / 86400;\n const t = (jd - 2451545) / 36525;\n const te = (jde - 2451545) / 36525;\n const tau = 0.1 * te;\n const nut = calculateNutation(te);\n const solar = calculateSolar(jd, nut.deltaPsi, nut.eps, te, tau, t);\n return { solar, jd };\n };\n\n /**\n * Solves for solar transit (Noon).\n */\n const calculateTransit = (date: Date): Date => {\n let currentUtcTime = 12 - (_coords.longitude / 15);\n for (let i = 0; i < 3; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n currentUtcTime = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n }\n return toDate(date, currentUtcTime);\n };\n\n /**\n * Solves iteratively for a target zenith angle.\n */\n const solveIteratively = (date: Date, angleBelowHorizon: number, side: 'morning' | 'evening'): Date => {\n let prevTime = side === 'morning' ? 6 : 18;\n let currentUtcTime = prevTime;\n\n for (let i = 0; i < 5; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n const denominator = cosd(_coords.latitude) * cosd(solar.DEC);\n\n if (Math.abs(denominator) < 1e-10) return new Date(NaN);\n\n const cosH = (sind(-angleBelowHorizon) - sind(_coords.latitude) * sind(solar.DEC)) / denominator;\n if (cosH > 1 || cosH < -1) return new Date(NaN);\n\n const H = acosd(cosH) / 15;\n const transit = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n currentUtcTime = side === 'morning' ? transit - H : transit + H;\n\n if (Math.abs(currentUtcTime - prevTime) * 3600 < 1) break;\n prevTime = currentUtcTime;\n }\n return toDate(date, currentUtcTime);\n };\n\n /**\n * Solves iteratively for Sunrise/Maghrib (with refraction and SD).\n */\n const solvePhenomenonIteratively = (date: Date, side: 'morning' | 'evening'): Date => {\n let prevTime = side === 'morning' ? 6 : 18;\n let currentUtcTime = prevTime;\n\n for (let i = 0; i < 5; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n const refraction = 34 / 60;\n const sd_deg = solar.SD / 3600;\n const hp_deg = solar.HP / 3600;\n const elevation = _coords.elevation || 0;\n const dip = 0.02933333 * Math.sqrt(elevation);\n\n const targetZenith = 90 + refraction + sd_deg - hp_deg + dip;\n const denominator = cosd(_coords.latitude) * cosd(solar.DEC);\n\n if (Math.abs(denominator) < 1e-10) return new Date(NaN);\n\n const cosH = (cosd(targetZenith) - sind(_coords.latitude) * sind(solar.DEC)) / denominator;\n if (cosH > 1 || cosH < -1) return new Date(NaN);\n\n const H = acosd(cosH) / 15;\n const transit = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n currentUtcTime = side === 'morning' ? transit - H : transit + H;\n\n if (Math.abs(currentUtcTime - prevTime) * 3600 < 1) break;\n prevTime = currentUtcTime;\n }\n return toDate(date, currentUtcTime);\n };\n\n /**\n * Solves iteratively for Asr.\n */\n const solveAsrIteratively = (date: Date, factor: number, dhuhr: Date, temperature: number, pressureMbar: number): Date => {\n const { solar: solarZuhr } = getSolarAt(dhuhr);\n const zZuhr = Math.abs(_coords.latitude - solarZuhr.DEC);\n const sdZuhr = solarZuhr.SD / 3600;\n const refrZuhr = getRefraction(90 - zZuhr, temperature, pressureMbar) / 60;\n const zZuhrVisual = zZuhr - refrZuhr - sdZuhr;\n\n let prevTime = 15;\n let currentUtcTime = prevTime;\n\n for (let i = 0; i < 5; i++) {\n const checkDate = toDate(date, currentUtcTime);\n const { solar } = getSolarAt(checkDate);\n const zAsrVisual = atan2d(tand(zZuhrVisual) + factor, 1);\n const refrAsr = getRefraction(90 - zAsrVisual, temperature, pressureMbar) / 60;\n const sdAsr = solar.SD / 3600;\n const targetZenith = zAsrVisual + refrAsr + sdAsr;\n\n const denominator = cosd(_coords.latitude) * cosd(solar.DEC);\n if (Math.abs(denominator) < 1e-10) return new Date(NaN);\n\n const cosH = (cosd(targetZenith) - sind(_coords.latitude) * sind(solar.DEC)) / denominator;\n if (cosH > 1 || cosH < -1) return new Date(NaN);\n\n const H = acosd(cosH) / 15;\n const transit = 12 - (_coords.longitude / 15) - (solar.EOT / 60);\n currentUtcTime = transit + H;\n\n if (Math.abs(currentUtcTime - prevTime) * 3600 < 1) break;\n prevTime = currentUtcTime;\n }\n return toDate(date, currentUtcTime);\n };\n\n // Exposed API\n return {\n /**\n * Calculates prayer times for a given date.\n * Returns a Result object for robust error handling.\n */\n calculate: (\n date: Date,\n asrFactor: number = 2,\n temperature: number = 10,\n pressureMbar: number = 1010.0,\n ishaAngleOverride?: number\n ): Result<PrayerTimesResult> => {\n try {\n const dhuhr = calculateTransit(date);\n const params = PRESETS[_method];\n\n const fajr = solveIteratively(date, params.fajrAngle, 'morning');\n const sunrise = solvePhenomenonIteratively(date, 'morning');\n\n const maghrib = params.maghribInterval\n ? new Date(sunrise.getTime() + params.maghribInterval * 60000)\n : params.maghribAngle\n ? solveIteratively(date, params.maghribAngle, 'evening')\n : solvePhenomenonIteratively(date, 'evening');\n\n const ishaAngle = ishaAngleOverride !== undefined ? ishaAngleOverride : (params.ishaAngle || 18);\n const isha = params.ishaInterval\n ? new Date(maghrib.getTime() + params.ishaInterval * 60000)\n : solveIteratively(date, ishaAngle, 'evening');\n\n // Asr Calculation following the requested 6-step workflow:\n // 1. Angular distance of sun from zenith at noon\n // 2. Adjust to visual position (semi-diameter and refraction)\n // 3. Assign factor (1 for Shafi, 2 for Hanafi)\n // 4. Calculate target visual zenith angle\n // 5. Convert back to geometric target zenith\n // 6. Successive Approximation loop (inside solveAsrIteratively)\n const asr = solveAsrIteratively(date, asrFactor, dhuhr, temperature, pressureMbar);\n\n const dhahwaKubra = (isNaN(fajr.getTime()) || isNaN(maghrib.getTime()))\n ? new Date(NaN)\n : new Date((fajr.getTime() + maghrib.getTime()) / 2);\n\n const results: PrayerTimesResult = { fajr, sunrise, dhahwaKubra, dhuhr, asr, maghrib, isha };\n\n // Verify if any critical time is NaN\n if (isNaN(fajr.getTime()) || isNaN(dhuhr.getTime()) || isNaN(maghrib.getTime())) {\n return Failure('One or more prayer times could not be calculated for this location/date (astronomical edge case).');\n }\n\n return Success(results);\n } catch (e) {\n return Failure(e instanceof Error ? e.message : 'Unknown calculation error');\n }\n }\n };\n}\n","import { sind, cosd, acosd, atan2d, norm360 } from '../core/math.js';\nimport { calculateSolar } from '../astronomy/solar.js';\nimport { calculateNutation } from '../astronomy/nutation.js';\nimport { getJulianDate } from '../core/time.js';\nimport { createPrayerEngine } from '../prayer/engine/index.js';\nimport { calculateQibla } from './index.js';\nimport { Result, Success, Failure, validateInputs } from '../core/result.js';\n\n/**\n * Calculates the Polar Angle P for a spherical triangle.\n */\nfunction calculatePolarAngleP(PZdeg: number, PSdeg: number, Zdeg: number) {\n const c = PZdeg;\n const b = PSdeg;\n const B = Zdeg;\n\n const sinC = sind(c);\n const cosC = cosd(c);\n const sinBside = sind(b);\n const cosBside = cosd(b);\n\n const R = Math.hypot(cosC, sinC * cosd(B));\n if (R < 1e-12) return { angleP: NaN, sideZS: NaN };\n\n let x = cosBside / R;\n x = Math.min(1, Math.max(-1, x));\n\n const alpha = atan2d(sinC * cosd(B), cosC);\n const delta = acosd(x);\n\n const candidateSides = [alpha + delta, alpha - delta]\n .map(norm360)\n .filter((a) => a >= -1e-12 && a <= 180 + 1e-12);\n\n if (candidateSides.length === 0) return { angleP: NaN, sideZS: NaN };\n\n const a = candidateSides[0];\n const denom = sinBside * sinC;\n if (Math.abs(denom) < 1e-12) return { angleP: NaN, sideZS: NaN };\n\n let cosP = (cosd(a) - cosBside * cosC) / denom;\n cosP = Math.min(1, Math.max(-1, cosP));\n\n return {\n angleP: acosd(cosP),\n sideZS: a,\n };\n}\n\n/**\n * Calculates when the Sun will be at the Qibla direction, opposite, and sides.\n */\nexport function calculateSunAtQibla(\n lat: number, \n lng: number, \n date: Date = new Date(),\n elevation: number = 0,\n temperature: number = 10,\n pressure: number = 1010\n): Result<{ direction: string; bearing: number; time: Date }[]> {\n const validation = validateInputs(lat, lng, date);\n if (!validation.success) return Failure(validation.error);\n\n // 1. Get Qibla Direction\n const qiblaResult = calculateQibla({ latitude: lat, longitude: lng });\n if (!qiblaResult.success) return Failure(qiblaResult.error);\n const baseDir = qiblaResult.data.bearing;\n\n // 2. Get Zuhr Time (Solar Noon)\n const engine = createPrayerEngine({ latitude: lat, longitude: lng, elevation });\n const prayerTimesResult = engine.calculate(date, 2, temperature, pressure);\n if (!prayerTimesResult.success) return Failure(prayerTimesResult.error);\n const zuhrDate = prayerTimesResult.data.dhuhr;\n\n const zuhrDecimal = zuhrDate.getUTCHours() + zuhrDate.getUTCMinutes() / 60 + zuhrDate.getUTCSeconds() / 3600;\n\n // 3. Get Solar Declination at Zuhr time\n const jd = getJulianDate(zuhrDate);\n const te = (jd - 2451545) / 36525;\n const nut = calculateNutation(te);\n const solar = calculateSolar(jd, nut.deltaPsi, nut.eps, te, 0.1 * te, te);\n const sunDec = solar.DEC;\n\n const PZ = 90 - lat;\n const PS = 90 - sunDec;\n\n const offsets = [\n { name: 'Qibla', value: 0 },\n { name: 'Opposite', value: 180 },\n { name: 'Right', value: 90 },\n { name: 'Left', value: -90 }\n ] as const;\n\n const results: { direction: string; bearing: number; time: Date }[] = [];\n\n offsets.forEach((offset) => {\n const currentDir = norm360(baseDir + offset.value);\n const { angleP } = calculatePolarAngleP(PZ, PS, currentDir);\n\n if (!isNaN(angleP)) {\n const timeOffset = angleP / 15;\n const finalTimeDecimal = currentDir > 180 ? zuhrDecimal + timeOffset : zuhrDecimal - timeOffset;\n\n const time = new Date(zuhrDate);\n const hours = Math.floor(finalTimeDecimal);\n const minutes = Math.floor((finalTimeDecimal - hours) * 60);\n const seconds = Math.floor(((finalTimeDecimal - hours) * 60 - minutes) * 60);\n\n time.setUTCHours(hours, minutes, seconds);\n\n results.push({\n direction: offset.name,\n bearing: currentDir,\n time: time\n });\n }\n });\n\n return Success(results);\n}\n","import { atan2d, cosd, sind, tand } from '../core/math.js';\nimport { Coordinates } from '../prayer/types/index.js';\nimport { Result, validateInputs, Success } from '../core/result.js';\n\nconst MAKKAH_LAT = 21.42248700;\nconst MAKKAH_LNG = 39.82620600;\n\nexport interface QiblaResult {\n bearing: number;\n rhumbLine: number;\n distance: number;\n}\n\n/**\n * Calculates the direction to the Kaaba (Qibla) from a given coordinate.\n */\nexport function calculateQibla(coords: Coordinates): Result<QiblaResult> {\n const validation = validateInputs(coords.latitude, coords.longitude);\n if (!validation.success) return validation as any;\n\n const phi = coords.latitude;\n const lambda = coords.longitude;\n\n const y = sind(MAKKAH_LNG - lambda);\n const x = cosd(phi) * tand(MAKKAH_LAT) - sind(phi) * cosd(MAKKAH_LNG - lambda);\n\n let qibla = atan2d(y, x);\n if (qibla < 0) qibla += 360;\n\n // Rhumb Line calculation (loxodromic)\n const dPhi = Math.log(tand(MAKKAH_LAT / 2 + 45) / tand(phi / 2 + 45));\n const dLon = (MAKKAH_LNG - lambda) * Math.PI / 180;\n let rhumb = atan2d(dLon, dPhi);\n if (rhumb < 0) rhumb += 360;\n\n // Haversine Distance\n const R = 6371;\n const dLat = (MAKKAH_LAT - phi) * Math.PI / 180;\n const dl = (MAKKAH_LNG - lambda) * Math.PI / 180;\n const a = Math.sin(dLat / 2) ** 2 + Math.cos(phi * Math.PI / 180) * Math.cos(MAKKAH_LAT * Math.PI / 180) * Math.sin(dl / 2) ** 2;\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n const distance = R * c;\n\n return Success({\n bearing: qibla,\n rhumbLine: rhumb,\n distance: distance\n });\n}\n\nexport { calculateSunAtQibla } from './sun-qibla.js';\n"]}
@@ -0,0 +1,2 @@
1
+ var p=Math.PI/180,w=180/Math.PI,M=s=>Math.sin(p*s),A=s=>Math.cos(p*s),k=s=>Math.tan(p*s),q=s=>Math.asin(s)*w,T=s=>Math.acos(s)*w,v=(s,b)=>Math.atan2(s,b)*w,m=s=>{let b=s%360;return b<0&&(b+=360),b};var z=[[0,0,0,0,1,-171996,-174.2,92025,8.9],[0,0,2,-2,2,-13187,-1.6,5736,-3.1],[0,0,2,0,2,-2274,-0.2,977,-0.5],[0,0,0,0,2,2062,.2,-895,.5],[0,-1,0,0,0,-1426,3.4,54,-0.1],[1,0,0,0,0,712,.1,-7,0],[0,1,2,-2,2,-517,1.2,224,-0.6],[0,0,2,0,1,-386,-0.4,200,0],[1,0,2,0,2,-301,0,129,-0.1],[0,-1,2,-2,2,217,-0.5,-95,.3],[-1,0,0,2,0,158,0,-1,0],[0,0,2,-2,1,129,.1,-70,0],[-1,0,2,0,2,123,0,-53,0],[1,0,0,0,1,63,.1,-33,0],[0,0,0,2,0,63,0,-2,0],[-1,0,2,2,2,-59,0,26,0],[-1,0,0,0,1,-58,-0.1,32,0],[1,0,2,0,1,-51,0,27,0],[-2,0,0,2,0,-48,0,1,0],[-2,0,2,0,1,46,0,-24,0],[0,0,2,2,2,-38,0,16,0],[2,0,2,0,2,-31,0,13,0],[2,0,0,0,0,29,0,-1,0],[1,0,2,-2,2,29,0,-12,0],[0,0,2,0,0,26,0,-1,0],[0,0,2,-2,0,-22,0,0,0],[-1,0,2,0,1,21,0,-10,0],[0,2,0,0,0,17,-0.1,0,0],[0,2,2,-2,2,-16,.1,7,0],[-1,0,0,2,1,16,0,-8,0],[0,1,0,0,1,-15,0,9,0],[1,0,0,-2,1,-13,0,7,0],[0,-1,0,0,1,-12,0,6,0],[2,0,-2,0,0,11,0,0,0],[-1,0,2,2,1,-10,0,5,0],[1,0,2,2,2,-8,0,3,0],[0,-1,2,0,2,-7,0,3,0],[0,0,2,2,1,-7,0,3,0],[1,1,0,-2,0,-7,0,0,0],[0,1,2,0,2,7,0,-3,0],[-2,0,0,2,1,-6,0,3,0],[0,0,0,2,1,-6,0,3,0],[2,0,2,-2,2,6,0,-3,0],[1,0,0,2,0,6,0,0,0],[1,0,2,-2,1,6,0,-3,0],[0,0,0,-2,1,-5,0,3,0],[0,-1,2,-2,1,-5,0,3,0],[2,0,2,0,1,-5,0,3,0],[1,-1,0,0,0,5,0,0,0],[1,0,0,-1,0,-4,0,0,0],[0,0,0,1,0,-4,0,0,0],[0,1,0,-2,0,-4,0,0,0],[1,0,-2,0,0,4,0,0,0],[2,0,0,-2,1,4,0,-2,0],[0,1,2,-2,1,4,0,-2,0],[1,1,0,0,0,-3,0,0,0],[1,-1,0,-1,0,-3,0,0,0],[-1,-1,2,2,2,-3,0,1,0],[0,-1,2,2,2,-3,0,1,0],[1,-1,2,0,2,-3,0,1,0],[3,0,2,0,2,-3,0,1,0],[-2,0,2,0,2,-3,0,1,0],[1,0,2,0,0,3,0,0,0],[-1,0,2,4,2,-2,0,1,0],[1,0,0,0,2,-2,0,1,0],[-1,0,2,-2,1,-2,0,1,0],[0,-2,2,-2,1,-2,0,1,0],[-2,0,0,0,1,-2,0,1,0],[2,0,0,0,1,2,0,-1,0],[3,0,0,0,0,2,0,0,0],[1,1,2,0,2,2,0,-1,0],[0,0,2,1,2,2,0,-1,0],[1,0,0,2,1,-1,0,0,0],[1,0,2,2,1,-1,0,1,0],[1,1,0,-2,1,-1,0,0,0],[0,1,0,2,0,-1,0,0,0],[0,1,2,-2,0,-1,0,0,0],[0,1,-2,2,0,-1,0,0,0],[1,0,-2,2,0,-1,0,0,0],[1,0,-2,-2,0,-1,0,0,0],[1,0,2,-2,0,-1,0,0,0],[1,0,0,-4,0,-1,0,0,0],[2,0,0,-4,0,-1,0,0,0],[0,0,2,4,2,-1,0,0,0],[0,0,2,-1,2,-1,0,0,0],[-2,0,2,4,2,-1,0,1,0],[2,0,2,2,2,-1,0,0,0],[0,-1,2,0,1,-1,0,0,0],[0,0,-2,0,1,-1,0,0,0],[0,0,4,-2,2,1,0,0,0],[0,1,0,0,2,1,0,0,0],[1,1,2,-2,2,1,0,-1,0],[3,0,2,-2,2,1,0,0,0],[-2,0,2,2,2,1,0,-1,0],[-1,0,0,0,2,1,0,-1,0],[0,0,-2,2,1,1,0,0,0],[0,1,2,0,1,1,0,0,0],[-1,0,4,0,2,1,0,0,0],[2,1,0,-2,0,1,0,0,0],[2,0,0,2,0,1,0,0,0],[2,0,2,-2,1,1,0,-1,0],[2,0,-2,0,1,1,0,0,0],[1,-1,0,-2,0,1,0,0,0],[-1,0,0,1,1,1,0,0,0],[-1,-1,0,2,1,1,0,0,0],[0,1,0,1,0,1,0,0,0]];function e0(s){let b=s*s,i=b*s,R=m(134.962981389+198.867398056*s+m(477e3*s)+.008697222222*b+i/56250)*p,t=m(357.527723333+359.05034*s+m(35640*s)-.0001602777778*b-i/3e5)*p,x=m(93.271910277+82.017538055*s+m(483120*s)-.0036825*b+i/327272.7273)*p,n=m(297.850363055+307.11148*s+m(444960*s)-.001914166667*b+i/189473.6842)*p,e=m(125.044522222-134.136260833*s-m(1800*s)+.002070833333*b+i/45e4)*p,o=0,c=0;for(let h=0;h<z.length;h++){let l=z[h],H=l[3]*n+l[1]*t+l[0]*R+l[2]*x+l[4]*e,S=Math.sin(H),N=Math.cos(H);o+=(l[5]+s*l[6])*S,c+=(l[7]+s*l[8])*N;}let G=o/36e6,I=c/36e6,L=(84381.448-46.815*s-59e-5*b+.001813*i)/3600,f=L+I;return {deltaPsi:G,deltaEps:I,eps0:L,eps:f}}function s0(s,b,i,R,t,x){let{cos:n}=Math,e=175347046;e+=3341656*n(4.6692568+6283.07585*t),e+=34894*n(4.6261+12566.1517*t),e+=3497*n(2.7441+5753.3849*t),e+=3418*n(2.8289+3.5231*t),e+=3136*n(3.6277+77713.7715*t),e+=2676*n(4.4181+7860.4194*t),e+=2343*n(6.1352+3930.2097*t),e+=1324*n(.7425+11506.7698*t),e+=1273*n(2.0371+529.691*t),e+=1199*n(1.1096+1577.3435*t),e+=990*n(5.233+5884.927*t),e+=902*n(2.045+26.298*t),e+=857*n(3.508+398.149*t),e+=780*n(1.179+5223.694*t),e+=753*n(2.533+5507.553*t),e+=505*n(4.583+18849.228*t),e+=492*n(4.205+775.523*t),e+=357*n(2.92+.067*t),e+=317*n(5.849+11790.629*t),e+=284*n(1.899+796.298*t),e+=271*n(.315+10977.079*t),e+=243*n(.345+5486.778*t),e+=206*n(4.806+2544.314*t),e+=205*n(1.869+5573.143*t),e+=202*n(2.458+6069.777*t),e+=156*n(.833+213.299*t),e+=132*n(3.411+2942.463*t),e+=126*n(1.083+20.775*t),e+=115*n(.645+.98*t),e+=103*n(.636+4694.003*t),e+=102*n(.976+15720.839*t),e+=102*n(4.267+7.114*t),e+=99*n(6.21+2146.17*t),e+=98*n(.68+155.42*t),e+=86*n(5.98+161000.69*t),e+=85*n(1.3+6275.96*t),e+=85*n(3.67+71430.7*t),e+=80*n(1.81+17260.15*t),e+=79*n(3.04+12036.46*t),e+=75*n(1.76+5088.63*t),e+=74*n(3.5+3154.69*t),e+=74*n(4.68+801.82*t),e+=70*n(.83+9437.76*t),e+=62*n(3.98+8827.39*t),e+=61*n(1.82+7084.9*t),e+=57*n(2.78+6286.6*t),e+=56*n(4.39+14143.5*t),e+=56*n(3.47+6279.55*t),e+=52*n(.19+12139.55*t),e+=52*n(1.33+1748.02*t),e+=51*n(.28+5856.48*t),e+=49*n(.49+1194.45*t),e+=41*n(5.37+8429.24*t),e+=41*n(2.4+19651.05*t),e+=39*n(6.17+10447.39*t),e+=37*n(6.04+10213.29*t),e+=37*n(2.57+1059.38*t),e+=36*n(1.71+2352.87*t),e+=36*n(1.78+6812.77*t),e+=33*n(.59+17789.85*t),e+=30*n(.44+83996.85*t),e+=30*n(2.74+1349.87*t),e+=25*n(3.16+4690.48*t);let o=628331966747;o+=206059*n(2.678235+6283.07585*t),o+=4303*n(2.6351+12566.1517*t),o+=425*n(1.59+3.523*t),o+=119*n(5.796+26.298*t),o+=109*n(2.966+1577.344*t),o+=93*n(2.59+18849.23*t),o+=72*n(1.14+529.69*t),o+=68*n(1.87+398.15*t),o+=67*n(4.41+5507.55*t),o+=59*n(2.89+5223.69*t),o+=56*n(2.17+155.42*t),o+=45*n(.4+796.3*t),o+=36*n(.47+775.52*t),o+=29*n(2.65+7.11*t),o+=21*n(5.34+.98*t),o+=19*n(1.85+5486.78*t),o+=19*n(4.97+213.3*t),o+=17*n(2.99+6275.96*t),o+=16*n(.03+2544.31*t),o+=16*n(1.43+2146.17*t),o+=15*n(1.21+10977.08*t),o+=12*n(2.83+1748.02*t),o+=12*n(3.26+5088.63*t),o+=12*n(5.27+1194.45*t),o+=12*n(2.08+4694*t),o+=11*n(.77+553.57*t),o+=10*n(1.3+6286.6*t),o+=10*n(4.24+1349.87*t),o+=9*n(2.7+242.73*t),o+=9*n(5.64+951.72*t),o+=8*n(5.3+2352.87*t),o+=6*n(2.65+9437.76*t),o+=6*n(4.67+4690.48*t);let c=52919;c+=8720*n(1.0721+6283.0758*t),c+=309*n(.867+12566.152*t),c+=27*n(.05+3.52*t),c+=16*n(5.19+26.3*t),c+=16*n(3.68+155.42*t),c+=10*n(.76+18849.23*t),c+=9*n(2.06+77713.77*t),c+=7*n(.83+775.52*t),c+=5*n(4.66+1577.34*t),c+=4*n(1.03+7.11*t),c+=4*n(3.44+5573.14*t),c+=3*n(5.14+796.3*t),c+=3*n(6.05+5507.55*t),c+=3*n(1.19+242.73*t),c+=3*n(6.12+529.69*t),c+=3*n(.31+398.15*t),c+=3*n(2.28+553.57*t),c+=2*n(4.38+5223.69*t),c+=2*n(3.75+.98*t);let G=289*n(5.844+6283.076*t)+35+17*n(5.49+12566.15*t)+3*n(5.2+155.42*t)+n(4.72+3.52*t)+n(5.3+18849.23*t)+n(5.97+242.73*t),I=114*n(Math.PI)+8*n(4.13+6283.08*t)+n(3.84+12566.15*t),L=n(3.14),f=t*t,h=f*t,l=h*t,H=l*t,S=m((e+o*t+c*f+G*h+I*l+L*H)/1e8/(Math.PI/180)),N=m(S+180-25e-6),P=280*n(3.199+84334.662*t);P+=102*n(5.422+5507.553*t),P+=80*n(3.88+5223.69*t),P+=44*n(3.7+2352.87*t),P+=32*n(4+1577.34*t);let J=9*n(3.9+5507.55*t)+6*n(1.73+5223.69*t),K=(P+J*t)/1e8/(Math.PI/180),B=m(-K);B>180&&(B-=360);let r=100013989;r+=1670700*n(3.0984635+6283.07585*t),r+=13956*n(3.05525+12566.1517*t),r+=3084*n(5.1985+77713.7715*t),r+=1628*n(1.1739+5753.3849*t),r+=1576*n(2.8469+7860.4194*t),r+=925*n(5.453+11506.77*t),r+=542*n(4.564+3930.21*t),r+=472*n(3.661+5884.927*t),r+=346*n(.964+5507.553*t),r+=329*n(5.9+5223.694*t),r+=307*n(.299+5573.143*t),r+=243*n(4.273+11790.629*t),r+=212*n(5.847+1577.344*t),r+=186*n(5.022+10977.079*t),r+=175*n(3.012+18849.228*t),r+=110*n(5.055+5486.778*t),r+=98*n(.89+6069.78*t),r+=86*n(5.69+15720.84*t),r+=86*n(1.27+161000.69*t),r+=65*n(.27+17260.15*t),r+=63*n(.92+529.69*t),r+=57*n(2.01+83996.85*t),r+=56*n(5.24+71430.7*t),r+=49*n(3.25+2544.31*t),r+=47*n(2.58+775.52*t),r+=45*n(5.54+9437.76*t),r+=43*n(6.01+6275.96*t),r+=39*n(5.36+4694*t),r+=38*n(2.39+8827.39*t),r+=37*n(.83+19651.05*t),r+=37*n(4.9+12139.55*t),r+=36*n(1.67+12036.46*t),r+=35*n(1.84+2942.46*t),r+=33*n(.24+7084.9*t),r+=32*n(.18+5088.63*t),r+=32*n(1.78+398.15*t),r+=28*n(1.21+6286.6*t),r+=28*n(1.9+6279.55*t),r+=26*n(4.59+10447.39*t);let d=103019*n(1.10749+6283.07585*t);d+=1721*n(1.0644+12566.1517*t),d+=702*n(Math.PI),d+=32*n(1.02+18849.23*t),d+=31*n(2.84+5507.55*t),d+=25*n(1.32+5223.69*t),d+=18*n(1.42+1577.34*t),d+=10*n(5.91+10977.08*t),d+=9*n(1.42+6275.96*t),d+=9*n(.27+5486.78*t);let Q=4359*n(5.7846+6283.0758*t)+124*n(5.579+12566.152*t)+12*n(Math.PI)+9*n(3.63+77713.77*t)+6*n(1.87+5573.14*t)+3*n(5.47+18849.23*t),V=145*n(4.273+6283.076*t)+7*n(3.92+12566.15*t),W=4*n(2.56+6283.08*t),_=(r+d*t+Q*f+V*h+W*l)/1e8,y=m(S+180-1.397*R-31e-5*R*R),C=B+11e-6*(n(y*(Math.PI/180))-M(y*(Math.PI/180))),g=m(N+b-.005691611/_),O=m(v(M(g)*A(i)-k(C)*M(i),A(g))),X=m(360-O),Y=q(M(C)*A(i)+A(C)*M(i)*M(g)),F=x*x,Z=F*x,$=m(280.46061837+360.98564736629*(s-2451545)+387933e-9*F-Z/3871e4),j=m($+b*A(i)),U=m(j-O),E=959.63/_,a=8.794/_,u=(s+.5)%1,D=4*U+720-1440*u;return D>20&&(D-=1440),D<-20&&(D+=1440),{RA:O,DEC:Y,GHA:U,SHA:X,SD:E,HP:a,EOT:D,distance:_,lambdaApp:g}}export{M as a,A as b,k as c,q as d,T as e,v as f,m as g,e0 as h,s0 as i};//# sourceMappingURL=chunk-FTWK5BZJ.js.map
2
+ //# sourceMappingURL=chunk-FTWK5BZJ.js.map