mihrab-methods 1.0.1 → 1.1.0
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.
- package/README.md +104 -287
- package/certification.json +31 -20
- package/data/corrections/indonesia.json +721 -28
- package/data/corrections/morocco.json +201 -914
- package/dist/cjs/authorities/morocco.js +7 -6
- package/dist/cjs/core/compute.js +1 -1
- package/dist/cjs/core/types.d.ts +4 -0
- package/dist/cjs/data/generated/algeriaCertification.js +1 -1
- package/dist/cjs/data/generated/diyanetCertification.js +1 -1
- package/dist/cjs/data/generated/diyanetWorldPoints.js +1 -1
- package/dist/cjs/data/generated/indonesiaCertification.js +1 -1
- package/dist/cjs/data/generated/indonesiaCorrections.js +1 -1
- package/dist/cjs/data/generated/moroccoCertification.js +1 -1
- package/dist/cjs/data/generated/moroccoCorrections.js +1 -1
- package/dist/cjs/data/generated/moroccoMethodPoints.js +1 -1
- package/dist/cjs/data/generated/swedenCertification.js +1 -1
- package/dist/cjs/methods/morocco.d.ts +43 -20
- package/dist/cjs/methods/morocco.js +59 -25
- package/dist/cjs/methods/revisions.d.ts +1 -1
- package/dist/cjs/methods/revisions.js +1 -1
- package/dist/cjs/server.d.ts +12 -0
- package/dist/cjs/server.js +132 -0
- package/dist/esm/authorities/morocco.js +7 -6
- package/dist/esm/core/compute.js +1 -1
- package/dist/esm/core/types.d.ts +4 -0
- package/dist/esm/data/generated/algeriaCertification.js +1 -1
- package/dist/esm/data/generated/diyanetCertification.js +1 -1
- package/dist/esm/data/generated/diyanetWorldPoints.js +1 -1
- package/dist/esm/data/generated/indonesiaCertification.js +1 -1
- package/dist/esm/data/generated/indonesiaCorrections.js +1 -1
- package/dist/esm/data/generated/moroccoCertification.js +1 -1
- package/dist/esm/data/generated/moroccoCorrections.js +1 -1
- package/dist/esm/data/generated/moroccoMethodPoints.js +1 -1
- package/dist/esm/data/generated/swedenCertification.js +1 -1
- package/dist/esm/methods/morocco.d.ts +43 -20
- package/dist/esm/methods/morocco.js +54 -24
- package/dist/esm/methods/revisions.d.ts +1 -1
- package/dist/esm/methods/revisions.js +1 -1
- package/dist/esm/server.d.ts +12 -0
- package/dist/esm/server.js +126 -0
- package/docs/methods.md +24 -8
- package/package.json +5 -1
- package/schemas/certification.schema.json +119 -24
- package/dist/cjs/methods/scratch-congress.d.ts +0 -87
- package/dist/cjs/methods/scratch-congress.js +0 -539
- package/dist/esm/methods/scratch-congress.d.ts +0 -87
- package/dist/esm/methods/scratch-congress.js +0 -534
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const data = { "certified": true, "checkedAt": "2026-
|
|
1
|
+
const data = { "certified": true, "checkedAt": "2026-11-04", "places": 517, "checks": [{ "tables": "Indonesia — Kemenag", "places": 517, "times": 362934, "off": 0, "offWithoutCorrections": 405, "from": "2026-10-07", "to": "2027-01-31" }], "corrections": { "from": "2026-10-07", "to": "2027-01-31", "entries": 405, "sha256": "5d9dc4703832e0ae850aff0af79a6d2436e013f5e1e2203ace41c6e05b36978d" }, "revision": 1 };
|
|
2
2
|
export default data;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const data = { "from": "2026-10-07", "to": "2026-12-31", "points": { "-0.309,100.372": ["2026-11-22 isha -1"], "-0.333,111.739": ["2026-10-11 maghrib +1"], "-0.387,102.442": ["2026-10-09 fajr +1"], "-0.498,132.086": ["2026-11-13 sunrise -1", "2026-11-27 sunrise -1"], "-0.506,117.122": ["2026-10-10 asr +1"], "-0.870,121.586": ["2026-12-09 fajr +1"], "-0.926,100.364": ["2026-11-21 maghrib +1"], "-0.955,100.622": ["2026-10-19 asr +1", "2026-12-13 maghrib -1"], "-1.551,101.251": ["2026-10-14 maghrib +1"], "-1.588,123.503": ["2026-12-09 fajr -1"], "-1.993,121.339": ["2026-12-04 sunrise -1"], "-10.453,121.877": ["2026-11-03 asr -1", "2026-12-11 asr -1"], "-2.331,138.045": ["2026-11-20 maghrib -1"], "-2.572,101.120": ["2026-11-12 isha +1"], "-2.737,111.167": ["2026-12-21 sunrise -1"], "-3.381,112.552": ["2026-10-11 sunrise +1"], "-3.747,137.042": ["2026-10-08 asr +1"], "-3.751,102.427": ["2026-11-27 maghrib -1"], "-3.783,103.539": ["2026-11-22 sunrise -1", "2026-12-06 sunrise -1"], "-4.002,137.629": ["2026-10-12 sunrise +1"], "-4.031,121.923": ["2026-10-08 asr +1", "2026-12-09 asr +1"], "-4.350,119.887": ["2026-11-14 fajr +1"], "-6.014,106.050": ["2026-10-10 fajr +1"], "-6.384,106.773": ["2026-10-10 maghrib +1"], "-6.607,106.773": ["2026-10-23 isha +1", "2026-10-29 fajr +1", "2026-12-19 fajr -1"], "-6.760,111.038": ["2026-12-03 maghrib -1", "2026-12-13 maghrib -1", "2026-12-25 maghrib -1"], "-6.849,107.518": ["2026-11-03 fajr -1", "2026-12-26 fajr -1", "2026-12-27 sunrise -1"], "-6.867,109.138": ["2026-11-03 dhuhr +1"], "-6.921,107.607": ["2026-11-05 sunrise +1"], "-7.024,112.748": ["2026-11-21 asr +1"], "-7.392,111.440": ["2026-12-05 sunrise -1", "2026-12-13 sunrise -1"], "-7.643,112.906": ["2026-11-17 asr -1", "2026-11-28 asr -1"], "-7.715,110.357": ["2026-10-25 fajr +1", "2026-12-30 fajr +1"], "-7.870,112.527": ["2026-12-20 maghrib -1"], "-7.914,113.822": ["2026-10-22 sunrise +1"], "-7.982,112.631": ["2026-10-14 sunrise +1"], "-8.132,112.219": ["2026-12-30 maghrib -1"], "-8.194,111.103": ["2026-11-11 sunrise +1"], "-8.210,114.374": ["2026-10-16 sunrise +1"], "-8.376,123.416": ["2026-10-14 asr -1"], "-8.454,118.730": ["2026-12-13 sunrise -1"], "-8.655,116.537": ["2026-10-13 asr -1"], "-8.659,115.214": ["2026-11-30 maghrib -1"], "-8.818,120.614": ["2026-11-07 asr -1", "2026-11-16 asr -1"], "0.330,127.879": ["2026-10-29 maghrib +1"], "0.568,97.821": ["2026-10-25 isha +1"], "0.626,122.981": ["2026-10-12 sunrise +1"], "0.895,100.309": ["2026-12-13 asr -1"], "1.182,124.569": ["2026-12-29 maghrib -1"], "1.320,124.838": ["2026-10-14 maghrib +1"], "1.403,98.355": ["2026-10-19 asr -1"], "1.713,98.786": ["2026-10-09 sunrise +1", "2026-10-11 fajr +1", "2026-10-16 asr +1", "2026-10-29 fajr +1", "2026-11-25 sunrise +1", "2026-11-28 sunrise +1", "2026-12-10 sunrise +1", "2026-12-14 fajr +1"], "1.879,100.084": ["2026-12-25 isha -1"], "2.098,99.834": ["2026-12-13 fajr -1"], "2.333,99.052": ["2026-11-22 maghrib +1"], "3.107,98.498": ["2026-11-14 sunrise -1", "2026-11-22 sunrise -1", "2026-11-28 sunrise -1"], "3.741,96.836": ["2026-12-11 fajr -1"], "3.999,126.676": ["2026-12-03 sunrise +1"], "4.618,96.845": ["2026-10-18 asr +1"], "5.554,95.318": ["2026-11-27 maghrib -1"] } };
|
|
1
|
+
const data = { "from": "2026-10-07", "to": "2027-01-31", "points": { "-0.076,111.496": ["2027-01-22 sunrise -1"], "-0.128,109.410": ["2027-01-25 maghrib +1"], "-0.228,100.635": ["2027-01-29 maghrib -1"], "-0.238,104.608": ["2027-01-01 sunrise +1", "2027-01-06 maghrib -1", "2027-01-29 sunrise +1"], "-0.309,100.372": ["2026-11-22 isha -1", "2027-01-07 fajr +1", "2027-01-13 dhuhr -1"], "-0.316,100.031": ["2027-01-11 isha -1"], "-0.331,103.157": ["2027-01-22 isha -1"], "-0.333,111.739": ["2026-10-11 maghrib +1", "2027-01-08 fajr +1", "2027-01-23 fajr +1"], "-0.387,102.442": ["2026-10-09 fajr +1"], "-0.466,100.403": ["2027-01-15 maghrib +1", "2027-01-27 dhuhr +1"], "-0.498,132.086": ["2026-11-13 sunrise -1", "2026-11-27 sunrise -1", "2027-01-15 maghrib +1"], "-0.506,117.122": ["2026-10-10 asr +1"], "-0.622,100.284": ["2027-01-11 maghrib +1", "2027-01-20 maghrib +1"], "-0.665,119.744": ["2027-01-08 maghrib +1"], "-0.729,135.739": ["2027-01-19 maghrib +1"], "-0.794,100.663": ["2027-01-21 sunrise -1"], "-0.860,134.073": ["2027-01-12 sunrise -1"], "-0.870,121.586": ["2026-12-09 fajr +1", "2027-01-12 isha -1"], "-0.926,100.364": ["2026-11-21 maghrib +1"], "-0.942,122.792": ["2027-01-03 sunrise -1"], "-0.955,100.622": ["2026-10-19 asr +1", "2026-12-13 maghrib -1"], "-1.159,132.466": ["2027-01-20 maghrib -1"], "-1.186,136.089": ["2027-01-11 sunrise +1"], "-1.277,116.830": ["2027-01-31 dhuhr +1"], "-1.392,133.873": ["2027-01-21 sunrise -1"], "-1.551,101.251": ["2026-10-14 maghrib +1"], "-1.587,103.608": ["2027-01-28 sunrise -1", "2027-01-30 maghrib +1"], "-1.588,123.503": ["2026-12-09 fajr -1", "2027-01-10 isha +1", "2027-01-12 maghrib +1"], "-1.877,138.758": ["2027-01-16 isha +1", "2027-01-25 maghrib +1"], "-1.952,124.385": ["2027-01-09 fajr +1", "2027-01-18 isha -1"], "-1.969,101.356": ["2027-01-21 asr -1"], "-1.993,121.339": ["2026-12-04 sunrise -1", "2027-01-28 fajr -1"], "-10.173,123.581": ["2027-01-17 fajr +1"], "-10.453,121.877": ["2026-11-03 asr -1", "2026-12-11 asr -1", "2027-01-03 asr -1"], "-2.069,102.272": ["2027-01-09 sunrise -1"], "-2.093,119.489": ["2027-01-14 isha -1", "2027-01-16 sunrise -1"], "-2.120,115.173": ["2027-01-09 asr +1"], "-2.182,115.440": ["2027-01-02 dhuhr -1"], "-2.331,138.045": ["2026-11-20 maghrib -1", "2027-01-12 maghrib -1", "2027-01-15 maghrib -1"], "-2.426,115.256": ["2027-01-14 maghrib -1", "2027-01-31 sunrise +1"], "-2.487,106.411": ["2027-01-04 isha +1"], "-2.572,101.120": ["2026-11-12 isha +1", "2027-01-04 maghrib +1", "2027-01-08 dhuhr +1", "2027-01-09 isha +1"], "-2.586,115.384": ["2027-01-13 fajr +1"], "-2.670,111.638": ["2027-01-26 fajr -1"], "-2.672,118.890": ["2027-01-16 dhuhr +1", "2027-01-22 maghrib +1"], "-2.710,102.911": ["2027-01-06 sunrise +1", "2027-01-25 asr +1"], "-2.737,111.167": ["2026-12-21 sunrise -1", "2027-01-28 maghrib -1"], "-2.819,134.533": ["2027-01-15 fajr +1", "2027-01-19 fajr +1"], "-2.904,140.750": ["2027-01-04 fajr -1", "2027-01-29 maghrib -1"], "-2.928,115.163": ["2027-01-26 maghrib +1"], "-2.932,132.297": ["2027-01-14 asr +1"], "-2.938,119.377": ["2027-01-07 isha +1"], "-3.022,106.509": ["2027-01-07 dhuhr -1", "2027-01-25 isha -1"], "-3.257,127.100": ["2027-01-08 isha +1", "2027-01-25 isha +1"], "-3.272,103.824": ["2027-01-11 isha -1", "2027-01-23 fajr -1", "2027-01-30 asr -1"], "-3.295,102.863": ["2027-01-22 asr +1"], "-3.301,128.961": ["2027-01-06 isha +1"], "-3.381,112.552": ["2026-10-11 sunrise +1"], "-3.384,120.366": ["2027-01-13 dhuhr -1", "2027-01-23 asr -1", "2027-01-26 sunrise -1"], "-3.396,104.834": ["2027-01-04 isha -1", "2027-01-21 isha -1"], "-3.411,119.319": ["2027-01-10 isha +1"], "-3.438,102.198": ["2027-01-03 asr -1", "2027-01-21 sunrise -1"], "-3.462,114.825": ["2027-01-01 fajr +1"], "-3.481,102.527": ["2027-01-18 maghrib -1"], "-3.594,103.938": ["2027-01-22 isha +1", "2027-01-30 fajr +1"], "-3.660,103.777": ["2027-01-26 sunrise +1"], "-3.666,139.062": ["2027-01-29 asr +1"], "-3.684,138.480": ["2027-01-26 fajr -1"], "-3.730,137.967": ["2027-01-18 isha -1"], "-3.747,137.042": ["2026-10-08 asr +1", "2027-01-19 fajr +1"], "-3.751,102.427": ["2026-11-27 maghrib -1", "2027-01-12 sunrise +1"], "-3.783,103.539": ["2026-11-22 sunrise -1", "2026-12-06 sunrise -1", "2027-01-09 fajr -1", "2027-01-18 sunrise -1"], "-3.807,119.651": ["2027-01-28 fajr -1"], "-3.857,122.050": ["2027-01-07 isha -1", "2027-01-20 asr -1"], "-3.931,136.373": ["2027-01-11 asr -1", "2027-01-13 sunrise -1"], "-4.002,137.629": ["2026-10-12 sunrise +1"], "-4.017,119.636": ["2027-01-11 maghrib -1", "2027-01-16 fajr +1", "2027-01-24 isha -1"], "-4.031,121.923": ["2026-10-08 asr +1", "2026-12-09 asr +1", "2027-01-11 dhuhr +1", "2027-01-23 maghrib -1"], "-4.043,136.279": ["2027-01-21 dhuhr -1"], "-4.097,138.943": ["2027-01-11 isha +1", "2027-01-12 sunrise -1", "2027-01-17 maghrib +1"], "-4.317,104.347": ["2027-01-17 isha -1"], "-4.350,119.887": ["2026-11-14 fajr +1"], "-4.494,139.498": ["2027-01-06 asr +1"], "-4.495,105.221": ["2027-01-30 asr +1"], "-4.504,105.091": ["2027-01-18 maghrib -1", "2027-01-26 isha -1"], "-4.544,136.892": ["2027-01-06 maghrib +1"], "-4.745,122.012": ["2027-01-09 maghrib +1"], "-4.780,103.347": ["2027-01-07 maghrib +1", "2027-01-28 maghrib +1"], "-4.905,140.633": ["2027-01-02 sunrise -1", "2027-01-05 isha -1", "2027-01-18 isha -1"], "-5.069,105.551": ["2027-01-06 isha -1"], "-5.116,105.307": ["2027-01-01 asr -1"], "-5.133,119.420": ["2027-01-04 dhuhr -1", "2027-01-09 maghrib -1", "2027-01-12 maghrib -1"], "-5.288,122.497": ["2027-01-11 isha +1"], "-5.420,119.440": ["2027-01-22 isha -1"], "-5.431,105.262": ["2027-01-01 maghrib -1", "2027-01-21 asr +1"], "-5.555,120.194": ["2027-01-24 sunrise +1"], "-5.644,132.734": ["2027-01-19 isha +1", "2027-01-25 asr -1"], "-5.746,106.614": ["2027-01-30 fajr -1"], "-6.014,106.050": ["2026-10-10 fajr +1"], "-6.094,140.299": ["2027-01-03 isha +1"], "-6.120,106.174": ["2027-01-29 sunrise -1"], "-6.120,120.462": ["2027-01-02 sunrise +1", "2027-01-06 fajr +1", "2027-01-14 maghrib +1", "2027-01-30 fajr +1"], "-6.167,106.833": ["2027-01-06 maghrib +1"], "-6.170,106.640": ["2027-01-04 maghrib -1"], "-6.239,107.002": ["2027-01-12 isha +1"], "-6.284,106.714": ["2027-01-14 dhuhr -1", "2027-01-17 maghrib -1"], "-6.309,106.105": ["2027-01-15 maghrib -1", "2027-01-16 sunrise -1"], "-6.326,107.286": ["2027-01-05 dhuhr -1", "2027-01-25 dhuhr -1", "2027-01-30 dhuhr -1"], "-6.364,107.174": ["2027-01-04 dhuhr +1"], "-6.384,106.773": ["2026-10-10 maghrib +1"], "-6.479,106.824": ["2027-01-21 sunrise -1"], "-6.533,139.322": ["2027-01-15 fajr +1", "2027-01-28 asr +1"], "-6.607,106.773": ["2026-10-23 isha +1", "2026-10-29 fajr +1", "2026-12-19 fajr -1"], "-6.708,111.348": ["2027-01-15 isha -1", "2027-01-26 dhuhr -1"], "-6.760,111.038": ["2026-12-03 maghrib -1", "2026-12-13 maghrib -1", "2026-12-25 maghrib -1", "2027-01-03 maghrib -1"], "-6.764,108.479": ["2027-01-26 maghrib -1"], "-6.805,110.832": ["2027-01-27 fajr -1"], "-6.839,108.221": ["2027-01-17 isha -1", "2027-01-29 isha -1"], "-6.849,107.518": ["2026-11-03 fajr -1", "2026-12-26 fajr -1", "2026-12-27 sunrise -1"], "-6.867,109.138": ["2026-11-03 dhuhr +1"], "-6.872,109.036": ["2027-01-05 dhuhr -1", "2027-01-05 maghrib -1", "2027-01-07 sunrise -1", "2027-01-28 asr -1"], "-6.876,107.541": ["2027-01-24 maghrib -1", "2027-01-30 dhuhr -1"], "-6.888,109.675": ["2027-01-11 dhuhr -1"], "-6.889,112.063": ["2027-01-20 sunrise -1", "2027-01-21 isha +1", "2027-01-25 sunrise -1"], "-6.921,106.926": ["2027-01-13 sunrise -1"], "-6.921,107.607": ["2026-11-05 sunrise +1"], "-6.922,110.203": ["2027-01-12 fajr -1"], "-7.009,113.860": ["2027-01-10 fajr +1"], "-7.024,112.748": ["2026-11-21 asr +1", "2027-01-15 isha +1", "2027-01-29 dhuhr +1"], "-7.026,107.532": ["2027-01-18 fajr +1"], "-7.034,109.590": ["2027-01-06 sunrise +1", "2027-01-27 isha -1"], "-7.082,110.916": ["2027-01-01 sunrise -1"], "-7.114,112.416": ["2027-01-24 isha +1", "2027-01-27 sunrise -1"], "-7.161,113.482": ["2027-01-21 maghrib -1", "2027-01-24 dhuhr -1"], "-7.166,112.617": ["2027-01-08 dhuhr +1", "2027-01-24 asr +1"], "-7.318,110.175": ["2027-01-01 maghrib -1"], "-7.325,108.351": ["2027-01-11 sunrise -1"], "-7.327,110.498": ["2027-01-02 fajr -1", "2027-01-07 sunrise -1"], "-7.331,108.222": ["2027-01-08 sunrise +1", "2027-01-24 fajr +1"], "-7.361,109.902": ["2027-01-27 dhuhr -1"], "-7.368,108.541": ["2027-01-01 sunrise -1", "2027-01-30 dhuhr -1"], "-7.391,109.693": ["2027-01-08 sunrise -1", "2027-01-18 maghrib -1", "2027-01-24 fajr -1"], "-7.392,111.440": ["2026-12-05 sunrise -1", "2026-12-13 sunrise -1", "2027-01-02 dhuhr -1", "2027-01-08 sunrise -1", "2027-01-10 sunrise -1", "2027-01-12 sunrise -1", "2027-01-14 sunrise -1", "2027-01-24 fajr -1"], "-7.427,109.230": ["2027-01-03 isha -1"], "-7.558,112.232": ["2027-01-04 maghrib -1", "2027-01-23 fajr -1"], "-7.561,110.221": ["2027-01-03 sunrise +1"], "-7.598,112.785": ["2027-01-16 asr +1"], "-7.602,111.901": ["2027-01-19 fajr -1"], "-7.643,112.906": ["2026-11-17 asr -1", "2026-11-28 asr -1"], "-7.702,108.495": ["2027-01-01 maghrib -1", "2027-01-13 isha -1"], "-7.708,114.006": ["2027-01-20 sunrise +1"], "-7.715,110.357": ["2026-10-25 fajr +1", "2026-12-30 fajr +1"], "-7.727,109.010": ["2027-01-31 asr +1"], "-7.745,113.215": ["2027-01-03 maghrib -1"], "-7.759,113.416": ["2027-01-03 fajr -1"], "-7.819,112.043": ["2027-01-17 asr +1", "2027-01-31 isha +1"], "-7.827,112.010": ["2027-01-08 sunrise -1", "2027-01-16 maghrib -1"], "-7.870,112.527": ["2026-12-20 maghrib -1", "2027-01-09 sunrise -1"], "-7.873,111.460": ["2027-01-03 isha -1", "2027-01-11 maghrib -1", "2027-01-20 maghrib -1"], "-7.914,113.822": ["2026-10-22 sunrise +1"], "-7.982,112.631": ["2026-10-14 sunrise +1"], "-8.051,111.710": ["2027-01-10 maghrib -1"], "-8.107,115.090": ["2027-01-24 isha -1"], "-8.132,112.219": ["2026-12-30 maghrib -1"], "-8.137,113.223": ["2027-01-29 maghrib -1"], "-8.167,113.701": ["2027-01-28 dhuhr -1"], "-8.172,127.790": ["2027-01-02 fajr +1", "2027-01-21 asr +1"], "-8.194,111.103": ["2026-11-11 sunrise +1"], "-8.210,114.374": ["2026-10-16 sunrise +1"], "-8.343,114.571": ["2027-01-04 maghrib +1"], "-8.376,123.416": ["2026-10-14 asr -1", "2027-01-23 dhuhr -1", "2027-01-31 fajr -1"], "-8.454,118.730": ["2026-12-13 sunrise -1", "2027-01-30 sunrise -1"], "-8.461,115.354": ["2027-01-19 sunrise -1"], "-8.504,117.425": ["2027-01-02 sunrise -1"], "-8.509,118.619": ["2027-01-01 isha -1", "2027-01-04 isha -1"], "-8.540,115.404": ["2027-01-13 isha -1"], "-8.655,116.537": ["2026-10-13 asr -1", "2027-01-21 maghrib -1"], "-8.659,115.214": ["2026-11-30 maghrib -1"], "-8.704,116.268": ["2027-01-14 isha -1"], "-8.818,120.614": ["2026-11-07 asr -1", "2026-11-16 asr -1"], "-9.099,124.898": ["2027-01-04 maghrib +1", "2027-01-06 fajr -1", "2027-01-10 maghrib +1"], "-9.569,124.909": ["2027-01-02 maghrib -1", "2027-01-11 maghrib -1"], "-9.586,119.578": ["2027-01-19 maghrib +1"], "-9.646,120.258": ["2027-01-12 maghrib -1"], "-9.867,124.271": ["2027-01-19 maghrib -1"], "0.005,110.956": ["2027-01-19 fajr +1"], "0.330,127.879": ["2026-10-29 maghrib +1"], "0.341,101.031": ["2027-01-14 fajr +1", "2027-01-24 sunrise +1"], "0.379,109.954": ["2027-01-14 isha -1"], "0.382,123.985": ["2027-01-05 maghrib -1"], "0.399,101.859": ["2027-01-25 sunrise +1"], "0.498,115.271": ["2027-01-13 maghrib -1"], "0.568,97.821": ["2026-10-25 isha +1"], "0.626,122.981": ["2026-10-12 sunrise +1"], "0.656,127.445": ["2027-01-30 fajr -1"], "0.762,124.615": ["2027-01-03 asr -1"], "0.808,102.031": ["2027-01-14 isha -1"], "0.857,99.564": ["2027-01-03 maghrib -1"], "0.873,112.924": ["2027-01-28 sunrise -1"], "0.895,100.309": ["2026-12-13 asr -1"], "0.931,104.443": ["2027-01-02 dhuhr -1", "2027-01-28 sunrise -1"], "1.001,97.495": ["2027-01-29 fajr -1"], "1.068,127.469": ["2027-01-23 sunrise -1"], "1.126,104.054": ["2027-01-26 fajr +1"], "1.182,124.569": ["2026-12-29 maghrib -1", "2027-01-24 sunrise -1", "2027-01-26 fajr -1"], "1.320,124.838": ["2026-10-14 maghrib +1"], "1.360,109.307": ["2027-01-07 maghrib -1"], "1.403,98.355": ["2026-10-19 asr -1", "2027-01-01 fajr -1", "2027-01-01 isha +1"], "1.437,125.130": ["2027-01-07 fajr -1", "2027-01-09 fajr -1"], "1.496,124.844": ["2027-01-25 isha +1"], "1.713,98.786": ["2026-10-09 sunrise +1", "2026-10-11 fajr +1", "2026-10-16 asr +1", "2026-10-29 fajr +1", "2026-11-25 sunrise +1", "2026-11-28 sunrise +1", "2026-12-10 sunrise +1", "2026-12-14 fajr +1", "2027-01-04 sunrise +1", "2027-01-18 fajr +1", "2027-01-30 sunrise +1"], "1.722,128.012": ["2027-01-25 isha -1", "2027-01-26 fajr +1"], "1.879,100.084": ["2026-12-25 isha -1", "2027-01-05 fajr +1", "2027-01-07 fajr +1", "2027-01-11 sunrise +1", "2027-01-23 maghrib -1", "2027-01-30 sunrise +1"], "2.098,99.834": ["2026-12-13 fajr -1"], "2.160,100.801": ["2027-01-22 sunrise -1"], "2.333,99.052": ["2026-11-22 maghrib +1"], "2.476,96.382": ["2027-01-17 maghrib -1"], "2.543,98.324": ["2027-01-09 sunrise -1"], "2.743,125.361": ["2027-01-08 dhuhr -1"], "2.845,117.367": ["2027-01-03 asr +1"], "2.949,99.058": ["2027-01-16 fajr +1"], "2.963,99.801": ["2027-01-07 isha -1"], "2.972,99.632": ["2027-01-07 sunrise +1"], "3.001,107.785": ["2027-01-21 dhuhr +1"], "3.107,98.498": ["2026-11-14 sunrise -1", "2026-11-22 sunrise -1", "2026-11-28 sunrise -1", "2027-01-17 sunrise -1", "2027-01-26 fajr -1"], "3.256,97.180": ["2027-01-07 isha -1"], "3.302,117.619": ["2027-01-13 fajr -1", "2027-01-23 isha -1"], "3.509,99.113": ["2027-01-10 isha +1"], "3.573,98.690": ["2027-01-22 asr +1"], "3.586,116.604": ["2027-01-11 asr -1", "2027-01-29 fajr -1"], "3.611,125.488": ["2027-01-01 sunrise -1"], "3.612,116.909": ["2027-01-17 fajr -1"], "3.741,96.836": ["2026-12-11 fajr -1"], "3.956,108.384": ["2027-01-13 fajr -1"], "3.999,126.676": ["2026-12-03 sunrise +1", "2027-01-24 isha -1", "2027-01-30 isha -1"], "4.176,96.306": ["2027-01-15 dhuhr -1"], "4.264,98.061": ["2027-01-06 sunrise -1"], "4.463,97.972": ["2027-01-02 sunrise +1"], "4.618,96.845": ["2026-10-18 asr +1"], "4.636,95.583": ["2027-01-31 dhuhr +1"], "4.728,96.873": ["2027-01-19 isha +1"], "4.949,97.773": ["2027-01-13 maghrib -1"], "5.175,97.143": ["2027-01-30 sunrise +1"], "5.183,96.706": ["2027-01-11 maghrib -1", "2027-01-18 maghrib -1", "2027-01-19 isha -1", "2027-01-26 fajr +1"], "5.232,96.264": ["2027-01-01 fajr +1", "2027-01-04 sunrise +1", "2027-01-12 sunrise +1"], "5.554,95.318": ["2026-11-27 maghrib -1"] } };
|
|
2
2
|
export default data;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const data = { "certified": true, "checkedAt": "2026-
|
|
1
|
+
const data = { "certified": true, "checkedAt": "2026-11-04", "places": 164, "checks": [{ "tables": "Morocco — Habous", "places": 164, "times": 94350, "off": 0, "offWithoutCorrections": 114, "from": "2026-08-27", "to": "2026-11-30" }], "corrections": { "from": "2026-08-27", "to": "2026-11-30", "entries": 114, "sha256": "2ae7161a7164f7ccebf1aa9f81628a810ce8fdd337e0645907e6c58d0be6aae9" }, "revision": 2 };
|
|
2
2
|
export default data;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const data = { "from": "2026-08-27", "to": "2026-11-11", "points": { "20.798,-17.098": ["2026-08-31 fajr -1", "2026-09-05 asr +1", "2026-10-01 isha +1", "2026-10-07 maghrib -1"], "21.696,-16.465": ["2026-08-28 fajr +1", "2026-09-01 isha -1", "2026-09-02 isha -1", "2026-09-03 asr -1", "2026-09-03 isha -1", "2026-09-17 maghrib -1", "2026-09-18 maghrib -1", "2026-10-14 maghrib +1", "2026-10-16 sunrise -1", "2026-10-21 sunrise -1", "2026-10-27 asr +1", "2026-10-31 maghrib +1", "2026-11-05 fajr -1", "2026-11-08 maghrib +1", "2026-11-10 sunrise -1"], "22.512,-14.299": ["2026-08-29 maghrib +1"], "23.691,-15.982": ["2026-09-13 maghrib -1", "2026-11-02 asr +1"], "25.078,-12.368": ["2026-09-06 sunrise -1", "2026-09-08 maghrib +1", "2026-09-09 isha +1", "2026-10-30 fajr +1", "2026-11-01 fajr +1", "2026-11-08 isha -1"], "26.115,-14.535": ["2026-09-08 isha +1", "2026-11-03 maghrib +1", "2026-11-06 sunrise -1", "2026-11-10 maghrib +1"], "26.338,-12.837": ["2026-09-01 sunrise -1", "2026-09-03 maghrib +1", "2026-11-10 isha -1"], "26.760,-11.682": ["2026-08-30 maghrib +1"], "27.396,-9.050": ["2026-10-30 asr +1", "2026-10-31 maghrib +1", "2026-11-01 fajr +1", "2026-11-10 sunrise -1"], "27.926,-12.933": ["2026-08-30 maghrib +1", "2026-10-13 asr +1", "2026-10-17 sunrise -1", "2026-11-03 sunrise -1", "2026-11-08 maghrib +1", "2026-11-09 asr +1"], "28.006,-9.300": ["2026-08-30 fajr -1", "2026-09-12 maghrib -1", "2026-09-29 maghrib -1", "2026-10-25 sunrise -1", "2026-10-31 sunrise -1"], "28.031,-12.050": ["2026-08-31 sunrise -1"], "28.393,-11.119": ["2026-11-03 isha -1"], "28.558,-9.450": ["2026-10-14 asr +1", "2026-11-05 maghrib +1", "2026-11-06 sunrise -1", "2026-11-10 sunrise -1"], "28.949,-10.066": ["2026-08-27 sunrise -1", "2026-08-31 fajr -1", "2026-09-02 maghrib +1", "2026-09-04 isha +1", "2026-09-17 fajr -1", "2026-11-05 maghrib +1", "2026-11-07 asr +1"], "29.177,-9.732": ["2026-09-20 sunrise +1", "2026-09-22 sunrise +1", "2026-10-05 maghrib -1", "2026-10-11 asr +1", "2026-10-12 sunrise +1", "2026-10-15 asr +1", "2026-11-02 asr +1", "2026-11-10 asr +1"], "29.369,-10.184": ["2026-08-30 fajr -1", "2026-09-25 maghrib -1", "2026-10-13 maghrib -1", "2026-11-10 sunrise -1"], "29.391,-8.249": ["2026-11-06 maghrib +1", "2026-11-11 maghrib +1", "2026-11-11 sunrise -1"], "29.689,-9.733": ["2026-09-25 maghrib -1", "2026-11-05 sunrise -1"], "29.705,-8.982": ["2026-11-04 maghrib +1"], "29.746,-7.984": ["2026-10-27 asr +1"], "30.066,-8.467": ["2026-09-04 sunrise -1", "2026-09-09 fajr -1", "2026-10-03 sunrise +1", "2026-10-06 fajr -1", "2026-10-30 maghrib +1", "2026-11-06 sunrise -1"], "30.071,-6.865": ["2026-09-16 sunrise +1", "2026-10-01 asr +1", "2026-11-04 maghrib +1", "2026-11-10 maghrib +1"], "30.308,-5.849": ["2026-08-30 sunrise -1", "2026-11-02 asr +1"], "30.367,-9.567": ["2026-08-28 maghrib +1", "2026-10-25 asr +1", "2026-10-31 asr +1", "2026-11-07 asr +1", "2026-11-09 asr +1"], "30.373,-9.218": ["2026-09-06 sunrise -1", "2026-11-10 isha -1"], "30.441,-8.804": ["2026-08-27 fajr -1", "2026-08-28 maghrib +1", "2026-09-02 isha +1", "2026-09-26 fajr -1", "2026-10-09 fajr -1", "2026-11-07 sunrise -1"], "30.522,-7.933": ["2026-10-08 sunrise +1", "2026-10-10 maghrib -1", "2026-10-23 maghrib +1"], "30.665,-6.451": ["2026-08-31 maghrib +1", "2026-09-02 isha +1", "2026-09-04 asr +1", "2026-09-09 fajr -1", "2026-11-09 maghrib +1"], "30.726,-5.566": ["2026-09-08 asr +1", "2026-10-08 sunrise +1", "2026-10-20 sunrise +1"], "30.950,-7.850": ["2026-09-23 sunrise +1", "2026-10-14 asr +1", "2026-10-30 maghrib +1", "2026-11-01 sunrise -1", "2026-11-06 sunrise -1"], "30.971,-9.685": ["2026-08-27 sunrise -1", "2026-09-01 sunrise -1", "2026-09-07 fajr -1", "2026-09-26 maghrib -1", "2026-10-10 fajr -1", "2026-11-05 maghrib +1"], "31.106,-5.184": ["2026-10-07 asr +1", "2026-10-18 asr +1"], "31.160,-8.854": ["2026-09-12 fajr -1", "2026-10-18 isha -1", "2026-10-21 isha -1", "2026-11-03 sunrise -1"], "31.210,-6.151": ["2026-08-31 fajr -1", "2026-09-19 maghrib -1", "2026-10-01 fajr -1", "2026-11-06 maghrib +1", "2026-11-09 asr +1"], "31.248,-4.268": ["2026-09-02 fajr -1", "2026-10-28 maghrib +1", "2026-11-06 sunrise -1", "2026-11-09 isha -1"], "31.276,-9.452": ["2026-08-30 sunrise -1", "2026-10-31 maghrib +1"], "31.280,-7.966": ["2026-08-29 sunrise -1", "2026-10-26 maghrib +1", "2026-11-03 maghrib +1", "2026-11-07 maghrib +1", "2026-11-08 sunrise -1", "2026-11-10 maghrib +1"], "31.366,-5.999": ["2026-08-27 sunrise -1", "2026-10-30 maghrib +1", "2026-11-11 maghrib +1"], "31.405,-4.233": ["2026-10-04 sunrise +1", "2026-10-16 sunrise +1", "2026-10-30 asr +1", "2026-10-31 maghrib +1"], "31.489,-8.099": ["2026-09-13 maghrib -1", "2026-09-25 sunrise +1", "2026-11-06 asr +1", "2026-11-11 sunrise -1"], "31.490,-5.032": ["2026-11-05 maghrib +1"], "31.491,-5.532": ["2026-08-30 sunrise -1", "2026-11-02 sunrise -1", "2026-11-09 maghrib +1"], "31.501,-9.784": ["2026-09-27 sunrise +1", "2026-11-11 maghrib +1"], "31.502,-8.768": ["2026-08-31 maghrib +1", "2026-09-11 maghrib +1", "2026-10-22 sunrise +1", "2026-11-01 isha -1"], "31.536,-7.650": ["2026-08-27 fajr -1", "2026-11-08 asr +1", "2026-11-10 asr +1", "2026-11-11 sunrise -1"], "31.543,-7.949": ["2026-09-26 sunrise +1", "2026-10-04 sunrise +1", "2026-10-05 maghrib -1", "2026-10-24 asr +1", "2026-10-28 sunrise -1", "2026-10-31 asr +1"], "31.622,-8.035": ["2026-10-23 asr +1", "2026-10-30 sunrise -1", "2026-10-31 maghrib +1", "2026-11-09 maghrib +1", "2026-11-11 sunrise -1"], "31.641,-5.814": ["2026-08-27 maghrib +1", "2026-08-27 sunrise -1", "2026-08-31 isha +1", "2026-09-01 asr +1", "2026-09-04 fajr -1", "2026-09-26 fajr -1", "2026-10-02 sunrise +1"], "31.661,-4.952": ["2026-09-04 maghrib +1", "2026-09-18 fajr -1"], "31.706,-7.018": ["2026-08-31 sunrise -1", "2026-11-01 maghrib +1", "2026-11-06 maghrib +1", "2026-11-07 sunrise -1"], "31.788,-6.118": ["2026-08-29 fajr -1", "2026-09-05 sunrise -1", "2026-10-30 maghrib +1", "2026-11-05 maghrib +1"], "31.906,-5.184": ["2026-08-30 sunrise -1", "2026-09-04 fajr -1", "2026-10-05 maghrib -1", "2026-10-26 asr +1"], "31.925,-4.449": ["2026-09-01 maghrib +1", "2026-10-29 maghrib +1", "2026-11-05 maghrib +1", "2026-11-11 sunrise -1"], "31.931,-6.585": ["2026-08-31 sunrise -1", "2026-11-11 sunrise -1"], "32.037,-7.417": ["2026-08-31 sunrise -1", "2026-11-05 asr +1"], "32.045,-3.049": ["2026-09-12 maghrib -1", "2026-10-20 asr +1", "2026-11-09 maghrib +1"], "32.093,-1.233": ["2026-10-12 maghrib -1", "2026-10-26 asr +1", "2026-11-02 sunrise -1"], "32.142,-5.616": ["2026-09-05 asr +1", "2026-09-25 maghrib -1", "2026-10-13 asr +1", "2026-10-24 asr +1", "2026-10-28 asr +1", "2026-11-04 maghrib +1", "2026-11-08 maghrib +1", "2026-11-11 maghrib +1"], "32.174,-2.519": ["2026-09-03 fajr -1", "2026-09-06 sunrise -1"], "32.219,-7.966": ["2026-09-08 sunrise +1", "2026-09-23 fajr -1", "2026-10-27 asr +1"], "32.241,-8.532": ["2026-10-26 asr +1", "2026-11-02 maghrib +1", "2026-11-07 asr +1", "2026-11-07 maghrib +1", "2026-11-07 sunrise -1"], "32.257,-4.467": ["2026-08-28 maghrib +1", "2026-10-19 sunrise +1", "2026-11-04 maghrib +1", "2026-11-08 maghrib +1", "2026-11-11 maghrib +1"], "32.263,-9.248": ["2026-08-29 asr +1", "2026-09-02 isha +1", "2026-09-05 sunrise -1", "2026-09-07 fajr -1", "2026-09-29 maghrib -1", "2026-11-03 isha -1", "2026-11-03 sunrise -1"], "32.300,-6.370": ["2026-09-04 dhuhr -1", "2026-09-04 fajr -1", "2026-09-09 fajr -1"], "32.470,-7.918": ["2026-08-27 fajr -1", "2026-10-21 isha -1", "2026-10-31 sunrise -1", "2026-11-02 maghrib +1", "2026-11-07 maghrib +1", "2026-11-11 asr +1"], "32.487,-6.702": ["2026-09-27 sunrise +1"], "32.488,-7.201": ["2026-10-26 maghrib -1"], "32.529,-3.433": ["2026-10-22 maghrib +1", "2026-10-30 maghrib +1", "2026-11-06 maghrib +1", "2026-11-09 asr +1", "2026-11-10 sunrise -1", "2026-11-11 asr +1"], "32.530,-1.966": ["2026-10-19 asr +1", "2026-10-26 maghrib +1", "2026-11-05 maghrib +1", "2026-11-09 maghrib +1"], "32.557,-6.051": ["2026-09-03 sunrise -1", "2026-09-15 maghrib -1", "2026-10-03 maghrib -1", "2026-10-27 sunrise -1", "2026-11-03 asr +1", "2026-11-08 asr +1", "2026-11-09 sunrise -1"], "32.577,-6.282": ["2026-11-08 maghrib +1", "2026-11-09 sunrise -1"], "32.587,-8.717": ["2026-09-03 fajr -1", "2026-10-28 sunrise -1", "2026-11-11 asr +1", "2026-11-11 sunrise -1"], "32.645,-4.752": ["2026-08-28 isha +1", "2026-09-03 fajr -1", "2026-09-04 maghrib +1", "2026-09-09 fajr -1", "2026-09-26 isha +1", "2026-09-29 fajr -1", "2026-10-03 asr -1"], "32.645,-8.437": ["2026-08-31 sunrise -1", "2026-11-11 maghrib +1"], "32.712,-9.033": ["2026-10-24 asr +1", "2026-11-04 maghrib +1"], "32.843,-6.581": ["2026-09-07 isha +1", "2026-10-08 sunrise +1", "2026-11-11 asr +1"], "32.856,-6.919": ["2026-08-28 fajr -1", "2026-09-18 sunrise +1"], "32.902,-5.684": ["2026-08-27 fajr -1", "2026-08-28 sunrise -1", "2026-09-06 isha +1", "2026-09-21 isha +1", "2026-10-31 sunrise -1", "2026-11-02 maghrib +1", "2026-11-11 maghrib +1"], "32.985,-7.634": ["2026-10-29 sunrise -1", "2026-11-07 maghrib +1", "2026-11-11 asr +1"], "33.031,-4.016": ["2026-09-11 fajr -1", "2026-10-21 asr +1", "2026-11-11 maghrib +1"], "33.036,-1.998": ["2026-09-25 asr +1", "2026-10-06 maghrib -1", "2026-10-14 maghrib -1", "2026-11-08 asr +1", "2026-11-11 maghrib +1"], "33.059,-7.252": ["2026-09-28 maghrib -1", "2026-10-05 fajr -1", "2026-10-30 maghrib +1", "2026-11-03 sunrise -1"], "33.228,-6.201": ["2026-09-18 maghrib -1", "2026-09-29 maghrib -1", "2026-11-01 asr +1"], "33.236,-8.515": ["2026-11-11 sunrise -1"], "33.246,-7.233": ["2026-09-08 fajr -1", "2026-09-20 isha +1", "2026-09-27 isha +1", "2026-10-09 isha +1"], "33.249,-7.583": ["2026-08-27 isha +1", "2026-08-27 sunrise -1", "2026-09-03 maghrib +1", "2026-11-08 maghrib +1"], "33.276,-8.350": ["2026-09-16 maghrib -1", "2026-10-26 asr +1", "2026-11-08 asr +1", "2026-11-11 sunrise -1"], "33.357,-4.732": ["2026-08-27 maghrib +1", "2026-09-30 sunrise +1", "2026-10-24 asr +1", "2026-11-04 maghrib +1", "2026-11-07 asr +1"], "33.407,-6.000": ["2026-11-11 maghrib +1"], "33.430,-5.232": ["2026-10-02 maghrib -1", "2026-10-03 sunrise +1", "2026-10-18 asr +1", "2026-10-26 maghrib +1", "2026-10-29 asr +1", "2026-10-29 maghrib +1", "2026-10-30 maghrib +1"], "33.485,-6.602": ["2026-08-31 fajr -1", "2026-09-12 maghrib -1"], "33.558,-7.668": ["2026-09-01 maghrib +1", "2026-10-01 sunrise +1", "2026-10-20 maghrib +1", "2026-10-21 asr +1", "2026-11-05 maghrib +1", "2026-11-05 sunrise -1", "2026-11-06 asr +1"], "33.611,-7.133": ["2026-08-30 maghrib +1", "2026-09-01 sunrise -1", "2026-09-29 maghrib -1", "2026-10-31 sunrise -1", "2026-11-09 asr +1", "2026-11-10 sunrise -1"], "33.668,-7.399": ["2026-08-28 fajr -1", "2026-09-19 fajr -1"], "33.675,-5.384": ["2026-08-27 fajr -1", "2026-09-07 fajr -1", "2026-09-19 maghrib -1", "2026-10-16 sunrise +1"], "33.730,-5.016": ["2026-09-27 maghrib -1", "2026-10-09 asr +1", "2026-10-17 maghrib +1", "2026-11-01 maghrib +1"], "33.757,-7.167": ["2026-08-28 isha +1", "2026-08-30 isha +1", "2026-09-01 isha +1", "2026-09-25 isha +1", "2026-10-02 fajr -1", "2026-10-16 sunrise +1", "2026-11-05 maghrib +1", "2026-11-08 fajr +1"], "33.791,-6.784": ["2026-08-31 maghrib +1"], "33.793,-4.849": ["2026-08-27 sunrise -1", "2026-09-02 maghrib +1", "2026-09-22 fajr -1", "2026-10-30 sunrise -1"], "33.806,-4.420": ["2026-08-27 maghrib +1", "2026-10-02 sunrise +1", "2026-10-28 asr +1", "2026-11-01 asr +1"], "33.822,-6.083": ["2026-10-18 asr +1", "2026-10-23 maghrib +1", "2026-10-27 sunrise -1", "2026-11-03 maghrib +1", "2026-11-04 sunrise -1", "2026-11-08 asr +1"], "33.890,-5.583": ["2026-09-10 fajr -1", "2026-10-30 asr +1", "2026-11-07 maghrib +1", "2026-11-11 maghrib +1", "2026-11-11 sunrise -1"], "33.905,-6.336": ["2026-09-01 maghrib +1", "2026-09-23 sunrise +1", "2026-11-04 maghrib +1", "2026-11-09 maghrib +1"], "33.988,-3.017": ["2026-08-31 sunrise -1", "2026-10-07 fajr -1", "2026-10-13 maghrib -1", "2026-11-02 maghrib +1", "2026-11-04 asr +1", "2026-11-05 sunrise -1"], "34.014,-6.850": ["2026-08-27 sunrise -1", "2026-10-07 asr +1", "2026-11-03 asr +1", "2026-11-05 sunrise -1", "2026-11-06 asr +1", "2026-11-11 asr +1"], "34.033,-5.535": ["2026-09-02 sunrise -1", "2026-11-04 asr +1", "2026-11-06 maghrib +1"], "34.037,-4.433": ["2026-09-11 fajr -1", "2026-10-23 sunrise -1", "2026-11-08 asr +1", "2026-11-11 sunrise -1"], "34.044,-4.418": ["2026-08-31 maghrib +1", "2026-09-20 sunrise +1", "2026-10-17 asr +1", "2026-10-27 maghrib +1", "2026-10-31 maghrib +1", "2026-11-08 maghrib +1", "2026-11-10 sunrise -1"], "34.063,-5.017": ["2026-09-29 sunrise +1", "2026-10-22 asr +1", "2026-11-01 asr +1", "2026-11-07 maghrib +1", "2026-11-11 maghrib +1"], "34.071,-4.557": ["2026-08-28 maghrib +1", "2026-09-06 fajr -1", "2026-09-29 fajr -1", "2026-11-01 maghrib +1"], "34.075,-5.184": ["2026-10-06 sunrise +1"], "34.078,-4.600": ["2026-08-31 maghrib +1", "2026-10-26 maghrib +1", "2026-10-27 sunrise -1", "2026-11-02 maghrib +1", "2026-11-09 asr +1"], "34.149,-4.282": ["2026-09-07 isha +1", "2026-09-23 sunrise +1", "2026-10-07 maghrib -1"], "34.205,-3.366": ["2026-09-25 fajr -1", "2026-10-08 asr +1", "2026-11-07 maghrib +1"], "34.212,-5.717": ["2026-10-24 maghrib +1", "2026-11-04 maghrib +1", "2026-11-06 sunrise -1", "2026-11-09 maghrib +1"], "34.225,-6.604": ["2026-09-05 fajr -1", "2026-09-15 maghrib -1", "2026-11-02 isha -1", "2026-11-03 sunrise -1"], "34.253,-5.952": ["2026-09-03 isha +1", "2026-09-07 sunrise +1", "2026-09-17 maghrib -1", "2026-11-01 maghrib +1", "2026-11-03 asr +1"], "34.295,-4.683": ["2026-09-30 sunrise +1", "2026-10-02 maghrib -1", "2026-10-04 asr +1", "2026-10-19 asr +1", "2026-10-26 asr +1", "2026-10-28 maghrib +1", "2026-10-31 maghrib +1", "2026-11-01 sunrise -1", "2026-11-09 asr +1"], "34.299,-2.168": ["2026-10-27 maghrib +1", "2026-11-01 maghrib +1", "2026-11-07 sunrise -1"], "34.304,-6.316": ["2026-09-01 fajr -1", "2026-10-28 maghrib +1", "2026-10-31 maghrib +1", "2026-11-01 maghrib +1", "2026-11-05 asr +1"], "34.322,-5.216": ["2026-08-27 isha +1", "2026-09-04 sunrise -1", "2026-09-08 fajr -1"], "34.411,-2.882": ["2026-09-01 maghrib +1", "2026-09-01 sunrise -1", "2026-10-28 asr +1", "2026-11-05 maghrib +1", "2026-11-10 asr +1", "2026-11-10 maghrib +1", "2026-11-10 sunrise -1", "2026-11-11 sunrise -1"], "34.518,-4.653": ["2026-09-24 fajr -1", "2026-09-29 fajr -1", "2026-10-01 sunrise +1", "2026-10-27 sunrise -1", "2026-10-29 maghrib +1", "2026-10-30 maghrib +1", "2026-10-31 maghrib +1", "2026-11-05 asr +1", "2026-11-07 sunrise -1", "2026-11-08 sunrise -1"], "34.565,-2.501": ["2026-10-21 isha -1", "2026-10-27 sunrise -1", "2026-11-04 asr +1", "2026-11-07 asr +1", "2026-11-08 sunrise -1", "2026-11-09 maghrib +1"], "34.626,-3.883": ["2026-09-11 isha +1", "2026-10-19 maghrib +1", "2026-11-09 maghrib +1", "2026-11-11 asr +1"], "34.678,-1.933": ["2026-08-27 sunrise -1", "2026-10-25 maghrib +1", "2026-11-02 asr +1", "2026-11-02 sunrise -1", "2026-11-04 maghrib +1"], "34.725,-4.099": ["2026-09-24 asr +1", "2026-09-25 maghrib -1", "2026-10-25 maghrib +1", "2026-11-04 maghrib +1", "2026-11-05 sunrise -1"], "34.764,-3.799": ["2026-09-02 sunrise -1", "2026-09-28 asr +1", "2026-10-27 asr +1", "2026-10-30 sunrise -1", "2026-11-06 maghrib +1", "2026-11-10 asr +1"], "34.794,-2.402": ["2026-10-26 maghrib +1", "2026-11-03 maghrib +1", "2026-11-11 sunrise -1"], "34.795,-5.583": ["2026-10-16 maghrib +1", "2026-10-31 sunrise -1"], "34.869,-6.285": ["2026-10-23 maghrib +1", "2026-11-07 maghrib +1", "2026-11-10 sunrise -1", "2026-11-11 sunrise -1"], "34.876,-4.631": ["2026-09-24 maghrib -1", "2026-10-17 asr +1", "2026-10-26 asr +1", "2026-10-29 sunrise -1", "2026-11-04 asr +1", "2026-11-07 asr +1"], "34.891,-2.357": ["2026-09-01 maghrib +1", "2026-09-20 fajr -1", "2026-09-26 fajr -1", "2026-10-09 isha -1", "2026-10-11 fajr -1", "2026-11-03 sunrise -1"], "34.895,-5.937": ["2026-09-04 fajr -1", "2026-10-03 fajr -1", "2026-11-10 sunrise -1"], "34.912,-2.200": ["2026-11-04 sunrise -1", "2026-11-05 maghrib +1", "2026-11-05 sunrise -1"], "34.925,-3.390": ["2026-08-28 maghrib +1", "2026-09-13 fajr -1", "2026-10-19 dhuhr -1", "2026-10-26 dhuhr -1", "2026-11-04 maghrib +1"], "34.930,-2.717": ["2026-08-28 sunrise -1", "2026-08-29 maghrib +1", "2026-10-30 asr +1", "2026-10-31 sunrise -1", "2026-11-03 asr +1", "2026-11-08 maghrib +1"], "34.940,-2.101": ["2026-10-28 sunrise -1", "2026-11-05 maghrib +1"], "34.984,-5.918": ["2026-08-27 sunrise -1", "2026-09-27 fajr -1", "2026-09-27 maghrib -1", "2026-10-30 sunrise -1"], "34.991,-4.883": ["2026-09-01 maghrib +1", "2026-09-08 sunrise -1", "2026-10-27 asr +1", "2026-11-01 asr +1", "2026-11-01 sunrise -1", "2026-11-08 maghrib +1"], "35.035,-2.940": ["2026-08-29 maghrib +1", "2026-09-21 fajr -1", "2026-09-27 fajr -1", "2026-11-07 isha -1", "2026-11-10 isha -1"], "35.115,-2.418": ["2026-09-04 isha +1", "2026-09-08 sunrise -1", "2026-09-11 fajr -1", "2026-09-15 maghrib +1", "2026-10-02 isha +1", "2026-10-19 maghrib +1", "2026-11-11 sunrise -1"], "35.140,-5.270": ["2026-08-28 maghrib +1", "2026-09-15 fajr -1", "2026-10-31 sunrise -1"], "35.171,-2.251": ["2026-08-27 maghrib +1", "2026-11-04 asr +1", "2026-11-04 maghrib +1", "2026-11-10 asr +1"], "35.172,-6.153": ["2026-09-19 fajr -1", "2026-11-11 sunrise -1"], "35.183,-2.936": ["2026-09-11 fajr -1", "2026-09-21 maghrib -1", "2026-10-08 sunrise +1", "2026-10-30 sunrise -1", "2026-11-05 asr +1", "2026-11-08 asr +1"], "35.186,-4.670": ["2026-09-10 fajr -1"], "35.227,-3.933": ["2026-08-31 maghrib +1", "2026-11-02 fajr +1", "2026-11-09 maghrib +1"], "35.254,-2.984": ["2026-09-08 maghrib +1", "2026-09-10 isha +1", "2026-10-15 sunrise +1", "2026-11-10 isha -1"], "35.264,-2.918": ["2026-09-12 maghrib -1", "2026-10-03 sunrise +1", "2026-10-31 maghrib +1", "2026-11-01 maghrib +1"], "35.264,-2.966": ["2026-08-27 maghrib +1", "2026-08-29 isha +1", "2026-09-04 maghrib +1", "2026-09-10 fajr -1"], "35.414,-5.100": ["2026-08-27 isha +1", "2026-10-02 asr +1", "2026-10-26 sunrise -1", "2026-11-04 maghrib +1"], "35.438,-6.052": ["2026-09-11 fajr -1", "2026-10-14 fajr -1", "2026-11-05 maghrib +1"], "35.546,-5.369": ["2026-09-04 dhuhr -1", "2026-09-12 fajr -1"], "35.606,-5.285": ["2026-09-25 maghrib -1", "2026-10-26 sunrise -1"], "35.677,-5.333": ["2026-10-30 sunrise -1", "2026-11-06 asr +1", "2026-11-08 maghrib +1", "2026-11-09 asr +1"], "35.728,-5.821": ["2026-08-27 maghrib +1", "2026-08-28 dhuhr -1", "2026-09-04 sunrise -1", "2026-09-06 maghrib +1", "2026-10-13 dhuhr -1"], "35.821,-5.566": ["2026-09-24 sunrise +1", "2026-10-20 maghrib +1", "2026-10-22 asr +1", "2026-10-26 sunrise -1", "2026-10-30 asr +1", "2026-11-07 asr +1", "2026-11-08 maghrib +1"], "35.827,-5.368": ["2026-08-28 sunrise -1", "2026-09-18 fajr -1", "2026-10-03 fajr -1"], "35.868,-5.352": ["2026-08-27 maghrib +1", "2026-08-27 sunrise -1", "2026-09-25 maghrib -1", "2026-10-21 asr +1", "2026-11-10 sunrise -1", "2026-11-11 sunrise -1"] } };
|
|
1
|
+
const data = { "from": "2026-08-27", "to": "2026-11-30", "points": { "21.626,-16.466": ["2026-09-01 isha -1"], "23.701,-15.984": ["2026-11-04 dhuhr -1"], "26.125,-14.532": ["2026-09-08 isha +1"], "26.358,-12.833": ["2026-09-03 maghrib +1"], "26.763,-11.682": ["2026-11-16 dhuhr +1"], "27.152,-13.232": ["2026-08-28 fajr +1"], "27.406,-9.051": ["2026-09-24 asr -1", "2026-10-30 asr +1", "2026-11-16 maghrib +1"], "27.926,-12.933": ["2026-11-16 dhuhr +1", "2026-11-19 maghrib -1"], "28.051,-12.050": ["2026-11-29 dhuhr +1"], "28.433,-11.119": ["2026-09-11 asr -1", "2026-11-17 fajr -1"], "29.382,-10.184": ["2026-10-20 asr -1"], "29.715,-8.983": ["2026-11-12 maghrib +1"], "30.387,-9.567": ["2026-08-30 isha -1"], "30.475,-8.801": ["2026-10-09 fajr -1"], "30.532,-7.933": ["2026-10-10 maghrib -1", "2026-11-28 asr +1"], "30.695,-6.451": ["2026-11-26 maghrib +1"], "30.950,-7.850": ["2026-10-15 maghrib -1"], "31.189,-8.851": ["2026-08-29 isha -1"], "31.240,-6.151": ["2026-09-19 maghrib -1", "2026-11-14 maghrib +1", "2026-11-16 maghrib +1"], "31.268,-4.266": ["2026-11-25 sunrise -1"], "31.280,-7.966": ["2026-10-22 maghrib -1", "2026-10-25 maghrib -1"], "31.366,-5.999": ["2026-11-19 maghrib +1"], "31.501,-5.534": ["2026-11-21 maghrib +1"], "31.510,-5.034": ["2026-09-11 isha -1", "2026-09-14 asr -1"], "31.545,-8.766": ["2026-08-31 maghrib +1"], "31.567,-7.652": ["2026-11-28 maghrib +1"], "31.631,-8.032": ["2026-11-14 maghrib +1"], "31.691,-4.952": ["2026-11-10 asr -1"], "31.829,-6.117": ["2026-09-26 maghrib -1", "2026-11-21 maghrib +1"], "31.927,-4.449": ["2026-11-29 maghrib +1"], "31.936,-5.184": ["2026-09-28 maghrib -1", "2026-10-05 maghrib -1"], "31.951,-6.584": ["2026-08-30 isha -1", "2026-11-20 maghrib +1", "2026-11-27 maghrib +1"], "32.142,-5.616": ["2026-09-05 asr +1", "2026-09-25 maghrib -1"], "32.267,-4.467": ["2026-09-01 maghrib -1", "2026-10-06 maghrib -1"], "32.330,-6.367": ["2026-11-13 maghrib +1"], "32.480,-7.915": ["2026-10-23 isha +1"], "32.497,-6.699": ["2026-11-24 isha +1"], "32.539,-3.433": ["2026-08-29 isha -1", "2026-11-26 maghrib +1"], "32.655,-8.434": ["2026-10-14 asr -1"], "32.682,-4.752": ["2026-10-03 asr -1", "2026-10-19 asr -1", "2026-11-27 maghrib +1"], "32.862,-6.584": ["2026-10-16 isha -1"], "32.886,-6.917": ["2026-09-03 asr -1", "2026-10-04 isha -1"], "32.932,-5.683": ["2026-11-02 maghrib +1"], "33.036,-1.998": ["2026-09-25 asr +1", "2026-11-20 sunrise +1"], "33.236,-8.515": ["2026-11-22 sunrise +1"], "33.260,-7.581": ["2026-10-28 sunrise +1"], "33.283,-8.350": ["2026-09-24 maghrib +1"], "33.416,-6.000": ["2026-11-16 maghrib +1"], "33.430,-5.232": ["2026-10-02 maghrib -1"], "33.522,-6.599": ["2026-09-12 maghrib -1"], "33.558,-7.668": ["2026-09-20 asr -1", "2026-11-14 isha -1", "2026-11-18 asr -1"], "33.611,-7.133": ["2026-11-29 maghrib -1", "2026-11-30 fajr +1"], "33.685,-5.384": ["2026-09-14 isha -1", "2026-09-16 isha -1", "2026-11-14 maghrib +1"], "33.791,-6.784": ["2026-11-18 asr -1", "2026-11-21 asr -1"], "33.900,-5.583": ["2026-11-11 sunrise -1"], "34.053,-5.535": ["2026-11-26 maghrib +1"], "34.054,-4.418": ["2026-09-02 isha -1"], "34.088,-4.598": ["2026-10-26 maghrib +1"], "34.189,-4.284": ["2026-09-02 asr -1"], "34.205,-4.015": ["2026-11-05 asr -1"], "34.215,-3.366": ["2026-11-07 maghrib +1", "2026-11-30 sunrise -1"], "34.265,-5.950": ["2026-09-03 asr -1"], "34.309,-2.165": ["2026-10-13 isha +1"], "34.411,-2.882": ["2026-11-05 maghrib +1"], "34.528,-4.650": ["2026-09-20 sunrise -1"], "34.725,-4.098": ["2026-09-24 asr +1"], "34.764,-3.799": ["2026-11-20 fajr +1", "2026-11-25 maghrib +1"], "34.876,-4.631": ["2026-11-17 maghrib +1", "2026-11-27 maghrib +1"], "34.915,-2.200": ["2026-11-22 maghrib +1"], "34.918,-5.933": ["2026-10-14 asr +1"], "34.920,-2.351": ["2026-10-09 isha -1"], "34.929,-2.715": ["2026-11-19 fajr +1", "2026-11-21 isha +1"], "34.960,-2.101": ["2026-09-17 isha -1"], "35.181,-2.251": ["2026-09-09 asr -1", "2026-09-18 maghrib +1"], "35.182,-6.153": ["2026-10-28 asr -1"], "35.294,-2.965": ["2026-11-15 fajr +1", "2026-11-23 isha +1"], "35.569,-5.367": ["2026-09-10 isha -1"], "35.616,-5.285": ["2026-10-20 asr -1"], "35.687,-5.333": ["2026-09-19 fajr +1"], "35.821,-5.566": ["2026-11-14 fajr +1", "2026-11-28 asr -1", "2026-11-28 maghrib -1"] } };
|
|
2
2
|
export default data;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated by scripts/embed.mjs — do not edit; edit the JSON under data/ instead.
|
|
2
|
-
const data = { "1": [34.0138, -6.
|
|
2
|
+
const data = { "1": [34.0138, -6.8488, 0.395, 0.421], "2": [33.832, -6.081, 0.729, 0.719], "3": [33.915, -6.333, 0.726, 0.724], "4": [33.5216, -6.5988, 0.761, 0.756], "5": [33.4165, -6, 1.182, 1.095], "6": [33.797, -7.166, 0.363, 0.392], "7": [34.245, -6.599, 0.495, 0.517], "8": [34.212, -5.717, 0.723, 0.716], "9": [34.314, -6.316, 0.498, 0.516], "10": [34.2649, -5.9505, 0.365, 0.393], "12": [34.918, -5.933, 0.497, 0.516], "13": [34.8788, -6.283, 0.364, 0.392], "14": [35.7586, -5.8145, 0.597, 0.61], "15": [35.5688, -5.3668, 0.776, 0.764], "16": [35.182, -6.1527, 0.367, 0.391], "17": [35.468, -6.051, 0.395, 0.423], "18": [35.1701, -5.267, 1.133, 1.049], "19": [35.6164, -5.285, 0.366, 0.393], "20": [35.6874, -5.3328, 0.362, 0.392], "21": [34.9942, -5.9155, 0.434, 0.462], "22": [35.821, -5.566, 0.435, 0.46], "23": [35.2471, -3.9335, 0.496, 0.517], "24": [35.888, -5.355, 0.767, 0.748], "25": [35.847, -5.3666, 0.55, 0.562], "26": [35.1993, -4.6675, 0.55, 0.558], "27": [35.434, -5.1, 0.364, 0.392], "28": [34.9999, -4.8836, 1.169, 1.086], "29": [34.7948, -5.5828, 0.89, 0.861], "31": [34.678, -1.933, 0.909, 0.875], "32": [34.9205, -2.3508, 0.499, 0.518], "33": [32.113, -1.2333, 1.005, 0.957], "34": [32.53, -1.966, 1.005, 0.958], "35": [34.215, -3.366, 0.679, 0.682], "36": [34.309, -2.165, 1.091, 1.026], "37": [32.204, -2.5152, 1.006, 0.955], "38": [34.4114, -2.8816, 1.056, 0.993], "39": [35.1838, -2.9337, 0.497, 0.518], "40": [35.294, -2.965, 0.363, 0.396], "41": [33.9982, -3.0168, 1.108, 1.035], "42": [35.065, -2.933, 0.599, 0.611], "43": [35.264, -2.918, 0.5, 0.515], "44": [35.2839, -2.9826, 0.5, 0.516], "45": [32.5395, -3.4335, 1.265, 1.154], "46": [33.036, -1.998, 1.274, 1.162], "47": [34.575, -2.4997, 0.84, 0.818], "49": [35.181, -2.251, 0.364, 0.389], "50": [35.1453, -2.4155, 0.362, 0.395], "51": [34.8035, -2.3995, 1, 0.951], "52": [34.9153, -2.2005, 0.951, 0.909], "53": [34.96, -2.101, 0.603, 0.612], "54": [34.9289, -2.7149, 0.831, 0.811], "55": [34.9617, -3.3828, 0.825, 0.807], "57": [32.045, -3.049, 0.98, 0.936], "58": [33.5583, -7.6677, 0.503, 0.516], "59": [33.6976, -7.3987, 0.363, 0.394], "60": [33.611, -7.133, 0.599, 0.61], "61": [32.9982, -7.6324, 0.692, 0.683], "62": [33.283, -7.233, 0.704, 0.698], "63": [32.4978, -7.1993, 0.763, 0.751], "64": [33.0596, -7.251, 0.861, 0.834], "65": [33.2595, -7.581, 0.55, 0.568], "66": [33.236, -8.515, 0.364, 0.391], "67": [33.2831, -8.3498, 0.439, 0.457], "68": [32.6548, -8.4335, 0.482, 0.509], "69": [32.6075, -8.7161, 0.495, 0.512], "70": [32.9318, -5.6825, 1.056, 0.993], "71": [33.228, -6.201, 1.005, 0.952], "72": [31.829, -6.117, 1.646, 1.429], "73": [32.33, -6.367, 1.152, 1.07], "74": [31.951, -6.584, 1.365, 1.225], "75": [32.4972, -6.6985, 0.76, 0.752], "76": [31.7362, -7.0146, 1.363, 1.233], "77": [32.5639, -6.0509, 1.201, 1.106], "78": [32.5967, -6.2852, 0.792, 0.773], "79": [32.886, -6.917, 0.969, 0.921], "80": [32.8625, -6.5838, 0.995, 0.945], "81": [34.063, -5.017, 0.719, 0.717], "82": [33.8327, -4.849, 1.057, 0.996], "83": [34.0845, -5.1835, 0.684, 0.685], "84": [33.367, -4.732, 1.65, 1.43], "85": [33.0471, -4.016, 1.004, 0.958], "86": [33.8155, -4.4185, 1.287, 1.17], "88": [33.73, -5.016, 1.294, 1.179], "89": [34.2052, -4.015, 1, 0.955], "90": [34.528, -4.6503, 0.95, 0.908], "91": [34.647, -3.8826, 1.221, 1.127], "92": [34.7642, -3.7989, 1.264, 1.162], "93": [34.7255, -4.0978, 0.998, 0.956], "94": [34.048, -4.4327, 0.774, 0.767], "95": [34.295, -4.683, 0.608, 0.617], "96": [34.3619, -5.2161, 0.55, 0.567], "97": [34.8762, -4.6314, 1.384, 1.249], "98": [34.189, -4.284, 0.685, 0.684], "99": [33.9, -5.583, 0.822, 0.808], "101": [33.685, -5.384, 1.137, 1.056], "102": [34.0527, -5.535, 0.985, 0.934], "103": [33.43, -5.232, 1.255, 1.154], "104": [31.6313, -8.0322, 0.828, 0.808], "105": [32.0569, -7.4185, 0.795, 0.783], "106": [31.511, -9.784, 0.395, 0.422], "107": [31.5451, -8.7662, 0.76, 0.748], "108": [32.226, -7.966, 0.795, 0.781], "109": [32.48, -7.915, 0.921, 0.888], "110": [30.9979, -9.6837, 0.724, 0.721], "111": [32.2991, -9.25, 0.436, 0.462], "112": [32.7148, -9.033, 0.364, 0.392], "113": [32.2478, -8.533, 0.73, 0.725], "114": [31.543, -7.949, 0.828, 0.81], "115": [31.495, -8.099, 0.829, 0.808], "117": [30.387, -9.567, 0.604, 0.602], "118": [30.4747, -8.8006, 0.594, 0.605], "119": [29.6986, -9.7324, 0.6, 0.613], "120": [30.0828, -8.4669, 1.478, 1.313], "121": [30.532, -7.933, 1.266, 1.154], "122": [29.715, -8.983, 1.31, 1.18], "123": [29.7462, -7.9836, 0.906, 0.873], "124": [29.3909, -8.249, 1.285, 1.167], "127": [30.3935, -9.2171, 0.6, 0.608], "128": [31.9271, -4.4485, 1.057, 0.996], "129": [31.2683, -4.266, 1.057, 1], "130": [31.4154, -4.2329, 1.054, 0.997], "132": [31.6906, -4.9515, 1.058, 0.992], "133": [32.142, -5.616, 1.544, 1.365], "134": [31.51, -5.0342, 1.06, 0.997], "135": [32.267, -4.467, 1.224, 1.128], "136": [32.682, -4.752, 1.333, 1.204], "137": [30.3279, -5.8488, 0.953, 0.907], "138": [30.9182, -6.9335, 1.156, 1.069], "139": [31.501, -5.534, 1.287, 1.169], "141": [31.2399, -6.1505, 1.288, 1.172], "142": [30.695, -6.451, 1.305, 1.181], "143": [31.3665, -5.9994, 1.322, 1.201], "144": [31.1163, -5.1835, 0.991, 0.944], "145": [31.9357, -5.1835, 1.742, 1.503], "146": [31.691, -5.815, 1.511, 1.339], "147": [30.7659, -5.5657, 0.759, 0.759], "148": [29.3821, -10.1845, 0.645, 0.649], "149": [28.9794, -10.0665, 0.856, 0.834], "150": [28.571, -9.452, 0.602, 0.609], "151": [28.0148, -9.2999, 0.685, 0.685], "152": [28.4334, -11.1188, 0.601, 0.606], "153": [29.1804, -9.7324, 0.815, 0.802], "154": [27.4057, -9.0509, 0.727, 0.714], "156": [27.1525, -13.2324, 0.363, 0.399], "157": [26.7626, -11.6825, 0.598, 0.61], "158": [26.1247, -14.532, 0.361, 0.397], "159": [27.9259, -12.9327, 0.364, 0.398], "161": [26.3576, -12.833, 0.597, 0.602], "162": [25.1276, -12.3678, 0.6, 0.608], "164": [28.0509, -12.0501, 0.603, 0.61], "165": [23.7011, -15.9839, 0.438, 0.464], "166": [20.848, -17.1, 0.368, 0.401], "167": [22.549, -14.2997, 0.598, 0.611], "168": [21.626, -16.466, 0.598, 0.608], "302": [34.088, -4.598, 0.599, 0.61], "303": [34.0544, -4.4185, 0.778, 0.761], "304": [34.101, -4.55, 0.437, 0.46], "305": [31.1895, -8.8505, 1.011, 0.951], "306": [31.296, -9.449, 1.056, 0.997], "312": [33.7911, -6.784, 0.498, 0.514], "314": [31.5667, -7.6517, 0.893, 0.858], "315": [31.2796, -7.9661, 1.154, 1.074], "317": [30.95, -7.85, 1.648, 1.433], "320": [30.081, -6.865, 1.284, 1.177] };
|
|
3
3
|
export default data;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const data = { "certified": true, "checkedAt": "2026-
|
|
1
|
+
const data = { "certified": true, "checkedAt": "2026-11-04", "places": 108, "checks": [{ "tables": "Sweden — Islamiska Förbundet’s tables", "places": 107, "times": 61344, "off": 0, "offWithoutCorrections": 20, "from": "2026-10-11", "to": "2027-12-07", "setAside": { "misplaced": [], "sourceFaults": 35037, "copiedRows": 682 } }, { "tables": "Sweden — Diyanet’s own tables", "places": 159, "times": 1393794, "off": 0, "offWithoutCorrections": 259, "from": "2024-01-01", "to": "2027-12-31" }], "corrections": { "from": "2024-01-01", "to": "2027-12-31", "entries": 270, "sha256": "173d7145b5ec917882f8ac9890dd1fa5f3143bd714eb540482861bf8a6bac660" }, "revision": 1 };
|
|
2
2
|
export default data;
|
|
@@ -2,26 +2,44 @@
|
|
|
2
2
|
* Morocco — the Ministry of Habous and Islamic Affairs's method, as its
|
|
3
3
|
* timetable is computed (issue #10).
|
|
4
4
|
*
|
|
5
|
-
* Read off
|
|
5
|
+
* Read off the ministry's tables: 96 days of 2026 for its 164 located
|
|
6
|
+
* cities, and — through the Internet Archive — its pages of 2014–2025 for
|
|
7
|
+
* Rabat, Figuig, Tangier, Casablanca, Laayoune and a dozen more, every
|
|
8
|
+
* month of the year. The ministry's program changed between 2019 and
|
|
9
|
+
* 2023; this is the one it has used since (2023–2026), and what it does:
|
|
6
10
|
*
|
|
7
11
|
* • a precise Sun — Meeus's apparent Sun with the full nutation and his
|
|
8
12
|
* chapter-28 equation of time; a JPL ephemeris fits no better, NOAA's
|
|
9
13
|
* and the Almanac's series far worse — taken at each prayer's own
|
|
10
14
|
* moment (iterated), declination and equation of time alike;
|
|
11
|
-
* • Fajr 19
|
|
15
|
+
* • Fajr 19° and Isha 17°, true altitudes;
|
|
12
16
|
* • Dhuhr five minutes after the transit;
|
|
13
|
-
* •
|
|
14
|
-
*
|
|
15
|
-
*
|
|
17
|
+
* • Asr on the APPARENT Sun, by the classical rule: a gnomon's shadow at
|
|
18
|
+
* noon (the noon declination, the noon altitude raised by refraction)
|
|
19
|
+
* plus one length (Shafi'i), and the moment the apparent Sun casts it
|
|
20
|
+
* — refraction by Sæmundsson's formula from the true altitude at noon,
|
|
21
|
+
* Bennett's from the apparent at Asr (Meeus 16.4 and 16.3);
|
|
22
|
+
* • sunrise one minute before, and Maghrib 1.8 minutes after, the Sun
|
|
23
|
+
* on an altitude −(34′ + s) − dip: refraction, the semi-diameter for
|
|
24
|
+
* its distance that day, and the city's own allowance for its horizon;
|
|
16
25
|
* • Fajr rounded down to the minute, the rest to the nearest.
|
|
17
26
|
*
|
|
18
|
-
* The dip is the ministry's own per city and per
|
|
19
|
-
* at sunrise, west at Maghrib
|
|
20
|
-
*
|
|
21
|
-
* about 0.
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
27
|
+
* The horizon allowance ("dip") is the ministry's own per city and per
|
|
28
|
+
* side — east at sunrise, west at Maghrib — fitted from its tables with
|
|
29
|
+
* the city's point (`data/moroccoMethodPoints.json`); it follows the
|
|
30
|
+
* city's height closely (about 0.32° + 0.025°·√metres east, 0.37° +
|
|
31
|
+
* 0.021°·√metres west; 92 % correlation), which is what a city off the
|
|
32
|
+
* list gets. It is an angle, not minutes: the allowance in minutes grows
|
|
33
|
+
* towards the solstices, as the ministry's does, and the fixed minute
|
|
34
|
+
* margins are the small rest. Fitted on the autumn alone (the first
|
|
35
|
+
* version of this method) the two could not be told apart, and the method
|
|
36
|
+
* drifted a tenth of a minute by late November.
|
|
37
|
+
*
|
|
38
|
+
* On the 2026 tables this is the ministry's printed minute for 99.88 % of
|
|
39
|
+
* times (114 of 94,350 off, each within a second or two of a minute's
|
|
40
|
+
* edge: the ministry's Sun and this one differ by that much), and never
|
|
41
|
+
* further than one; `data/corrections/morocco.json` holds the rest. On
|
|
42
|
+
* the archive's 2023–2026 pages, every month of the year, 99.3 %.
|
|
25
43
|
*/
|
|
26
44
|
export type MoroccoInstants = {
|
|
27
45
|
fajr: Date;
|
|
@@ -37,15 +55,20 @@ export declare function meeusApparentSun(d: number): {
|
|
|
37
55
|
eot: number;
|
|
38
56
|
};
|
|
39
57
|
/** Minutes before the horizon crossing that the ministry prints sunrise, and after it Maghrib. */
|
|
40
|
-
export declare const MOROCCO_SUNRISE_MARGIN = -
|
|
41
|
-
export declare const MOROCCO_MAGHRIB_MARGIN =
|
|
42
|
-
/** The
|
|
43
|
-
export declare const
|
|
44
|
-
|
|
45
|
-
|
|
58
|
+
export declare const MOROCCO_SUNRISE_MARGIN = -1;
|
|
59
|
+
export declare const MOROCCO_MAGHRIB_MARGIN = 1.8;
|
|
60
|
+
/** The horizon allowance of a city whose own is not known: degrees, from its height in metres, east (sunrise) and west (Maghrib). */
|
|
61
|
+
export declare const moroccoDipEast: (heightM: number) => number;
|
|
62
|
+
export declare const moroccoDipWest: (heightM: number) => number;
|
|
63
|
+
/** Refraction (degrees) that lifts a TRUE altitude h (degrees) to its apparent one — Sæmundsson, Meeus 16.4. */
|
|
64
|
+
export declare const refractionFromTrue: (h: number) => number;
|
|
65
|
+
/** Refraction (degrees) under an APPARENT altitude h (degrees) — Bennett, Meeus 16.3. */
|
|
66
|
+
export declare const refractionFromApparent: (h: number) => number;
|
|
46
67
|
/** Exact times, minutes past 00:00 UT of the civil date, margins applied, before rounding. NaN where one does not form. */
|
|
47
|
-
export declare function moroccoRawMinutes(latitude: number, longitude: number, year: number, month: number, day: number,
|
|
48
|
-
/** The horizon
|
|
68
|
+
export declare function moroccoRawMinutes(latitude: number, longitude: number, year: number, month: number, day: number,
|
|
69
|
+
/** The horizon allowance eastward, at sunrise, degrees: the city's own, else `moroccoDipEast(height)`. */
|
|
70
|
+
dipDeg?: number, asrShadow?: number,
|
|
71
|
+
/** The horizon allowance westward, at Maghrib; `moroccoDipWest(0)` offset by the east's excess when not known. */
|
|
49
72
|
dipMaghribDeg?: number): {
|
|
50
73
|
fajr: number;
|
|
51
74
|
sunrise: number;
|
|
@@ -2,26 +2,44 @@
|
|
|
2
2
|
* Morocco — the Ministry of Habous and Islamic Affairs's method, as its
|
|
3
3
|
* timetable is computed (issue #10).
|
|
4
4
|
*
|
|
5
|
-
* Read off
|
|
5
|
+
* Read off the ministry's tables: 96 days of 2026 for its 164 located
|
|
6
|
+
* cities, and — through the Internet Archive — its pages of 2014–2025 for
|
|
7
|
+
* Rabat, Figuig, Tangier, Casablanca, Laayoune and a dozen more, every
|
|
8
|
+
* month of the year. The ministry's program changed between 2019 and
|
|
9
|
+
* 2023; this is the one it has used since (2023–2026), and what it does:
|
|
6
10
|
*
|
|
7
11
|
* • a precise Sun — Meeus's apparent Sun with the full nutation and his
|
|
8
12
|
* chapter-28 equation of time; a JPL ephemeris fits no better, NOAA's
|
|
9
13
|
* and the Almanac's series far worse — taken at each prayer's own
|
|
10
14
|
* moment (iterated), declination and equation of time alike;
|
|
11
|
-
* • Fajr 19
|
|
15
|
+
* • Fajr 19° and Isha 17°, true altitudes;
|
|
12
16
|
* • Dhuhr five minutes after the transit;
|
|
13
|
-
* •
|
|
14
|
-
*
|
|
15
|
-
*
|
|
17
|
+
* • Asr on the APPARENT Sun, by the classical rule: a gnomon's shadow at
|
|
18
|
+
* noon (the noon declination, the noon altitude raised by refraction)
|
|
19
|
+
* plus one length (Shafi'i), and the moment the apparent Sun casts it
|
|
20
|
+
* — refraction by Sæmundsson's formula from the true altitude at noon,
|
|
21
|
+
* Bennett's from the apparent at Asr (Meeus 16.4 and 16.3);
|
|
22
|
+
* • sunrise one minute before, and Maghrib 1.8 minutes after, the Sun
|
|
23
|
+
* on an altitude −(34′ + s) − dip: refraction, the semi-diameter for
|
|
24
|
+
* its distance that day, and the city's own allowance for its horizon;
|
|
16
25
|
* • Fajr rounded down to the minute, the rest to the nearest.
|
|
17
26
|
*
|
|
18
|
-
* The dip is the ministry's own per city and per
|
|
19
|
-
* at sunrise, west at Maghrib
|
|
20
|
-
*
|
|
21
|
-
* about 0.
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
27
|
+
* The horizon allowance ("dip") is the ministry's own per city and per
|
|
28
|
+
* side — east at sunrise, west at Maghrib — fitted from its tables with
|
|
29
|
+
* the city's point (`data/moroccoMethodPoints.json`); it follows the
|
|
30
|
+
* city's height closely (about 0.32° + 0.025°·√metres east, 0.37° +
|
|
31
|
+
* 0.021°·√metres west; 92 % correlation), which is what a city off the
|
|
32
|
+
* list gets. It is an angle, not minutes: the allowance in minutes grows
|
|
33
|
+
* towards the solstices, as the ministry's does, and the fixed minute
|
|
34
|
+
* margins are the small rest. Fitted on the autumn alone (the first
|
|
35
|
+
* version of this method) the two could not be told apart, and the method
|
|
36
|
+
* drifted a tenth of a minute by late November.
|
|
37
|
+
*
|
|
38
|
+
* On the 2026 tables this is the ministry's printed minute for 99.88 % of
|
|
39
|
+
* times (114 of 94,350 off, each within a second or two of a minute's
|
|
40
|
+
* edge: the ministry's Sun and this one differ by that much), and never
|
|
41
|
+
* further than one; `data/corrections/morocco.json` holds the rest. On
|
|
42
|
+
* the archive's 2023–2026 pages, every month of the year, 99.3 %.
|
|
25
43
|
*/
|
|
26
44
|
const RAD = Math.PI / 180;
|
|
27
45
|
const DAY_MS = 86_400_000;
|
|
@@ -49,16 +67,21 @@ export function meeusApparentSun(d) {
|
|
|
49
67
|
}
|
|
50
68
|
const ITERATIONS = 3;
|
|
51
69
|
/** Minutes before the horizon crossing that the ministry prints sunrise, and after it Maghrib. */
|
|
52
|
-
export const MOROCCO_SUNRISE_MARGIN = -
|
|
53
|
-
export const MOROCCO_MAGHRIB_MARGIN =
|
|
54
|
-
/** The
|
|
55
|
-
export const
|
|
56
|
-
|
|
57
|
-
|
|
70
|
+
export const MOROCCO_SUNRISE_MARGIN = -1.0;
|
|
71
|
+
export const MOROCCO_MAGHRIB_MARGIN = 1.8;
|
|
72
|
+
/** The horizon allowance of a city whose own is not known: degrees, from its height in metres, east (sunrise) and west (Maghrib). */
|
|
73
|
+
export const moroccoDipEast = (heightM) => 0.32 + 0.025 * Math.sqrt(Math.max(heightM, 0));
|
|
74
|
+
export const moroccoDipWest = (heightM) => 0.37 + 0.021 * Math.sqrt(Math.max(heightM, 0));
|
|
75
|
+
/** Refraction (degrees) that lifts a TRUE altitude h (degrees) to its apparent one — Sæmundsson, Meeus 16.4. */
|
|
76
|
+
export const refractionFromTrue = (h) => (1.02 / Math.tan((h + 10.3 / (h + 5.11)) * RAD)) / 60;
|
|
77
|
+
/** Refraction (degrees) under an APPARENT altitude h (degrees) — Bennett, Meeus 16.3. */
|
|
78
|
+
export const refractionFromApparent = (h) => (1 / Math.tan((h + 7.31 / (h + 4.4)) * RAD)) / 60;
|
|
58
79
|
/** Exact times, minutes past 00:00 UT of the civil date, margins applied, before rounding. NaN where one does not form. */
|
|
59
|
-
export function moroccoRawMinutes(latitude, longitude, year, month, day,
|
|
60
|
-
/** The horizon
|
|
61
|
-
|
|
80
|
+
export function moroccoRawMinutes(latitude, longitude, year, month, day,
|
|
81
|
+
/** The horizon allowance eastward, at sunrise, degrees: the city's own, else `moroccoDipEast(height)`. */
|
|
82
|
+
dipDeg = moroccoDipEast(0), asrShadow = 1,
|
|
83
|
+
/** The horizon allowance westward, at Maghrib; `moroccoDipWest(0)` offset by the east's excess when not known. */
|
|
84
|
+
dipMaghribDeg = dipDeg + (moroccoDipWest(0) - moroccoDipEast(0))) {
|
|
62
85
|
const d0 = (Date.UTC(year, month, day) - Date.UTC(2000, 0, 1)) / DAY_MS - 0.5;
|
|
63
86
|
const at = (t) => meeusApparentSun(d0 + t / 1440);
|
|
64
87
|
let noon = 720 - 4 * longitude;
|
|
@@ -82,12 +105,19 @@ dipMaghribDeg = MOROCCO_MAGHRIB_DIP_SHARE * dipDeg) {
|
|
|
82
105
|
return t;
|
|
83
106
|
};
|
|
84
107
|
const fixed = (a) => () => a;
|
|
85
|
-
|
|
108
|
+
// Asr on the apparent Sun: the noon shadow of a gnomon from the apparent noon altitude (the noon
|
|
109
|
+
// declination), plus `asrShadow` lengths; the Sun's apparent altitude that casts it; the true
|
|
110
|
+
// altitude under it is what the hour angle is solved for, with the declination at the event.
|
|
111
|
+
const noonDec = at(noon).dec;
|
|
112
|
+
const noonTrue = 90 - Math.abs(latitude - noonDec / RAD);
|
|
113
|
+
const noonApparent = noonTrue + refractionFromTrue(noonTrue);
|
|
114
|
+
const asrApparent = Math.atan(1 / (asrShadow + 1 / Math.tan(noonApparent * RAD))) / RAD;
|
|
115
|
+
const asrTrue = asrApparent - refractionFromApparent(asrApparent);
|
|
86
116
|
return {
|
|
87
117
|
fajr: event(fixed(-19), -1, noon - 420) - 0.5,
|
|
88
118
|
sunrise: event(fixed(horizon - dipDeg), -1, noon - 360) + MOROCCO_SUNRISE_MARGIN,
|
|
89
119
|
dhuhr: noon + 5,
|
|
90
|
-
asr: event(
|
|
120
|
+
asr: event(fixed(asrTrue), 1, noon + 200),
|
|
91
121
|
maghrib: event(fixed(horizon - dipMaghribDeg), 1, noon + 360) + MOROCCO_MAGHRIB_MARGIN,
|
|
92
122
|
isha: event(fixed(-17), 1, noon + 420),
|
|
93
123
|
};
|
|
@@ -96,7 +126,7 @@ dipMaghribDeg = MOROCCO_MAGHRIB_DIP_SHARE * dipDeg) {
|
|
|
96
126
|
* The ministry's times for a point and civil date (month 0-based), on the
|
|
97
127
|
* minute. Null when a time does not form there.
|
|
98
128
|
*/
|
|
99
|
-
export function moroccoTimes(latitude, longitude, year, month, day, dipDeg
|
|
129
|
+
export function moroccoTimes(latitude, longitude, year, month, day, dipDeg, asrShadow = 1, dipMaghribDeg) {
|
|
100
130
|
const r = moroccoRawMinutes(latitude, longitude, year, month, day, dipDeg, asrShadow, dipMaghribDeg);
|
|
101
131
|
const all = [r.fajr, r.sunrise, r.dhuhr, r.asr, r.maghrib, r.isha];
|
|
102
132
|
if (!all.every(Number.isFinite))
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class HttpError extends Error {
|
|
2
|
+
readonly status: number;
|
|
3
|
+
constructor(status: number, message: string);
|
|
4
|
+
}
|
|
5
|
+
/** The answer to a request path and query. Throws HttpError, UncertifiedMethodError, RangeError or TypeError. */
|
|
6
|
+
export declare function handle(url: URL): unknown;
|
|
7
|
+
/** Status, body and headers for a request, errors included — what both servers send. */
|
|
8
|
+
export declare function respond(url: URL): {
|
|
9
|
+
status: number;
|
|
10
|
+
body: string;
|
|
11
|
+
headers: Record<string, string>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The HTTP API over the library — one handler, served two ways: by
|
|
3
|
+
* `tools/serve.ts` on Node (`npm run serve`) and by `api/worker.ts` at the
|
|
4
|
+
* edge (the public API). Nothing is logged or stored; every answer is JSON.
|
|
5
|
+
*
|
|
6
|
+
* GET / the routes, the methods' certification
|
|
7
|
+
* GET /v1/methods every method, as methodInfo gives it
|
|
8
|
+
* GET /v1/places?authority=algeria the authority's places (id, name, country, lat, lon, tz)
|
|
9
|
+
* GET /v1/nearest?authority=algeria&lat=36.75&lng=3.06
|
|
10
|
+
* GET /v1/times?place=algeria:27&date=2026-10-15 one day, as timesFor gives it
|
|
11
|
+
* GET /v1/times?authority=algeria&lat=36.75&lng=3.06&date=2026-10-15
|
|
12
|
+
* GET /v1/times?place=algeria:27&from=2026-10-01&to=2026-10-31
|
|
13
|
+
* GET /v1/authority?lat=36.75&lng=3.06 defaultAuthorityFor, with the country
|
|
14
|
+
*
|
|
15
|
+
* Options on /v1/times: asr=2 for the Hanafi Asr; strict=1 to refuse a date
|
|
16
|
+
* outside the certified span (HTTP 422) instead of answering 'method-only'.
|
|
17
|
+
*/
|
|
18
|
+
import { AUTHORITIES, methodInfo, nearestPlace, placeById, placesOf, timesFor, timesForRange, UncertifiedMethodError } from './index.js';
|
|
19
|
+
import { countryAt, defaultAuthorityFor } from './locate.js';
|
|
20
|
+
export class HttpError extends Error {
|
|
21
|
+
status;
|
|
22
|
+
constructor(status, message) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.status = status;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const isAuthority = (x) => !!x && AUTHORITIES.includes(x);
|
|
28
|
+
const num = (q, k) => {
|
|
29
|
+
const v = Number(q.get(k));
|
|
30
|
+
if (q.get(k) === null || !Number.isFinite(v))
|
|
31
|
+
throw new HttpError(400, `${k}: a number is needed`);
|
|
32
|
+
return v;
|
|
33
|
+
};
|
|
34
|
+
const authorityOf = (q) => {
|
|
35
|
+
const a = q.get('authority');
|
|
36
|
+
if (!isAuthority(a))
|
|
37
|
+
throw new HttpError(400, `authority: one of ${AUTHORITIES.join(', ')}`);
|
|
38
|
+
return a;
|
|
39
|
+
};
|
|
40
|
+
const placeOf = (q) => {
|
|
41
|
+
const id = q.get('place');
|
|
42
|
+
if (id) {
|
|
43
|
+
const p = placeById(id);
|
|
44
|
+
if (!p)
|
|
45
|
+
throw new HttpError(404, `no place ${id}`);
|
|
46
|
+
return p;
|
|
47
|
+
}
|
|
48
|
+
const near = nearestPlace(authorityOf(q), num(q, 'lat'), num(q, 'lng'));
|
|
49
|
+
if (!near)
|
|
50
|
+
throw new HttpError(404, 'no place near there');
|
|
51
|
+
return near.place;
|
|
52
|
+
};
|
|
53
|
+
const brief = (p) => ({ id: p.id, name: p.name, country: p.country, lat: p.lat, lon: p.lon, tz: p.tz });
|
|
54
|
+
const ROUTES = [
|
|
55
|
+
'/v1/methods',
|
|
56
|
+
'/v1/places?authority=<authority>',
|
|
57
|
+
'/v1/nearest?authority=<authority>&lat=<lat>&lng=<lng>',
|
|
58
|
+
'/v1/times?place=<authority:id>&date=<YYYY-MM-DD>[&asr=2][&strict=1]',
|
|
59
|
+
'/v1/times?authority=<authority>&lat=<lat>&lng=<lng>&date=<YYYY-MM-DD>',
|
|
60
|
+
'/v1/times?place=<authority:id>&from=<YYYY-MM-DD>&to=<YYYY-MM-DD>',
|
|
61
|
+
'/v1/authority?lat=<lat>&lng=<lng>',
|
|
62
|
+
];
|
|
63
|
+
/** The answer to a request path and query. Throws HttpError, UncertifiedMethodError, RangeError or TypeError. */
|
|
64
|
+
export function handle(url) {
|
|
65
|
+
const q = url.searchParams;
|
|
66
|
+
switch (url.pathname.replace(/\/+$/, '') || '/') {
|
|
67
|
+
case '/':
|
|
68
|
+
return {
|
|
69
|
+
name: 'mihrab-methods',
|
|
70
|
+
description: 'The prayer-time authorities’ own calculation methods, each reproducing its published timetable to the minute.',
|
|
71
|
+
docs: 'https://github.com/MihrabHQ/mihrab-methods#readme',
|
|
72
|
+
routes: ROUTES,
|
|
73
|
+
authorities: AUTHORITIES,
|
|
74
|
+
// each method's record, as the library carries it (the feed on main may be newer: methodInfo says the date)
|
|
75
|
+
methods: AUTHORITIES.map(a => {
|
|
76
|
+
const m = methodInfo(a);
|
|
77
|
+
return { authority: a, name: m.name, revision: m.revision, certified: m.certified, checkedAt: m.certification?.checkedAt ?? null, places: m.places };
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
case '/v1/methods':
|
|
81
|
+
return AUTHORITIES.map(methodInfo);
|
|
82
|
+
case '/v1/places':
|
|
83
|
+
return placesOf(authorityOf(q)).map(brief);
|
|
84
|
+
case '/v1/nearest': {
|
|
85
|
+
const near = nearestPlace(authorityOf(q), num(q, 'lat'), num(q, 'lng'));
|
|
86
|
+
return near && { place: brief(near.place), distanceKm: Math.round(near.distanceKm * 10) / 10 };
|
|
87
|
+
}
|
|
88
|
+
case '/v1/authority': {
|
|
89
|
+
const lat = num(q, 'lat'), lng = num(q, 'lng');
|
|
90
|
+
return { country: countryAt(lat, lng), authority: defaultAuthorityFor(lat, lng) };
|
|
91
|
+
}
|
|
92
|
+
case '/v1/times': {
|
|
93
|
+
const place = placeOf(q);
|
|
94
|
+
const opts = { asrShadow: q.get('asr') === '2' ? 2 : 1, strict: q.get('strict') === '1' };
|
|
95
|
+
const from = q.get('from'), to = q.get('to');
|
|
96
|
+
if (from && to)
|
|
97
|
+
return { place: brief(place), days: timesForRange(place, from, to, opts) };
|
|
98
|
+
return { place: brief(place), ...timesFor(place, q.get('date') ?? new Date().toISOString().slice(0, 10), opts) };
|
|
99
|
+
}
|
|
100
|
+
default:
|
|
101
|
+
throw new HttpError(404, `no such route; the routes are ${ROUTES.join(' · ')}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Status, body and headers for a request, errors included — what both servers send. */
|
|
105
|
+
export function respond(url) {
|
|
106
|
+
let status = 200;
|
|
107
|
+
let body;
|
|
108
|
+
try {
|
|
109
|
+
body = handle(url);
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
status = e instanceof HttpError ? e.status : e instanceof UncertifiedMethodError ? 422 : e instanceof RangeError || e instanceof TypeError ? 400 : 500;
|
|
113
|
+
body = { error: e.message };
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
status,
|
|
117
|
+
body: JSON.stringify(body),
|
|
118
|
+
headers: {
|
|
119
|
+
'content-type': 'application/json; charset=utf-8',
|
|
120
|
+
'access-control-allow-origin': '*',
|
|
121
|
+
'access-control-allow-methods': 'GET, OPTIONS',
|
|
122
|
+
// A day's times never change between releases: let browsers and the edge keep an answer for an hour.
|
|
123
|
+
'cache-control': status === 200 ? 'public, max-age=3600' : 'no-store',
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|