adhan-extended
Version:
High precision Islamic prayer time library (extended)
209 lines (175 loc) • 10.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _SolarTime = _interopRequireDefault(require("./SolarTime"));
var _TimeComponents4 = _interopRequireDefault(require("./TimeComponents"));
var _Prayer = _interopRequireDefault(require("./Prayer"));
var _Astronomical = _interopRequireDefault(require("./Astronomical"));
var _DateUtils = require("./DateUtils");
var _Madhab = require("./Madhab");
var _PolarCircleResolution = require("./PolarCircleResolution");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
var PrayerTimes = /*#__PURE__*/function () {
// eslint-disable-next-line complexity
function PrayerTimes(coordinates, date, calculationParameters) {
_classCallCheck(this, PrayerTimes);
this.coordinates = coordinates;
this.date = date;
this.calculationParameters = calculationParameters;
var solarTime = new _SolarTime["default"](date, coordinates);
var fajrTime;
var sunriseTime;
var dhuhrTime;
var asrTime;
var sunsetTime;
var maghribTime;
var ishaTime;
var nightFraction;
dhuhrTime = new _TimeComponents4["default"](solarTime.transit).utcDate(date.getFullYear(), date.getMonth(), date.getDate());
sunriseTime = new _TimeComponents4["default"](solarTime.sunrise).utcDate(date.getFullYear(), date.getMonth(), date.getDate());
sunsetTime = new _TimeComponents4["default"](solarTime.sunset).utcDate(date.getFullYear(), date.getMonth(), date.getDate());
var tomorrow = (0, _DateUtils.dateByAddingDays)(date, 1);
var tomorrowSolarTime = new _SolarTime["default"](tomorrow, coordinates);
var polarCircleResolver = calculationParameters.polarCircleResolution;
if ((!(0, _DateUtils.isValidDate)(sunriseTime) || !(0, _DateUtils.isValidDate)(sunsetTime) || isNaN(tomorrowSolarTime.sunrise)) && polarCircleResolver !== _PolarCircleResolution.PolarCircleResolution.Unresolved) {
var _TimeComponents, _TimeComponents2, _TimeComponents3;
var resolved = (0, _PolarCircleResolution.polarCircleResolvedValues)(polarCircleResolver, date, coordinates);
solarTime = resolved.solarTime;
tomorrowSolarTime = resolved.tomorrowSolarTime;
var dateComponents = [date.getFullYear(), date.getMonth(), date.getDate()];
dhuhrTime = (_TimeComponents = new _TimeComponents4["default"](solarTime.transit)).utcDate.apply(_TimeComponents, dateComponents);
sunriseTime = (_TimeComponents2 = new _TimeComponents4["default"](solarTime.sunrise)).utcDate.apply(_TimeComponents2, dateComponents);
sunsetTime = (_TimeComponents3 = new _TimeComponents4["default"](solarTime.sunset)).utcDate.apply(_TimeComponents3, dateComponents);
} // eslint-disable-next-line prefer-const
asrTime = new _TimeComponents4["default"](solarTime.afternoon((0, _Madhab.shadowLength)(calculationParameters.madhab))).utcDate(date.getFullYear(), date.getMonth(), date.getDate());
var tomorrowSunrise = new _TimeComponents4["default"](tomorrowSolarTime.sunrise).utcDate(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());
var night = (Number(tomorrowSunrise) - Number(sunsetTime)) / 1000;
fajrTime = new _TimeComponents4["default"](solarTime.hourAngle(-1 * calculationParameters.fajrAngle, false)).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); // special case for moonsighting committee above latitude 55
if (calculationParameters.method === 'MoonsightingCommittee' && coordinates.latitude >= 55) {
nightFraction = night / 7;
fajrTime = (0, _DateUtils.dateByAddingSeconds)(sunriseTime, -nightFraction);
}
var safeFajr = function () {
if (calculationParameters.method === 'MoonsightingCommittee') {
return _Astronomical["default"].seasonAdjustedMorningTwilight(coordinates.latitude, (0, _DateUtils.dayOfYear)(date), date.getFullYear(), sunriseTime);
} else {
var portion = calculationParameters.nightPortions().fajr;
nightFraction = portion * night;
return (0, _DateUtils.dateByAddingSeconds)(sunriseTime, -nightFraction);
}
}();
if (isNaN(fajrTime.getTime()) || safeFajr > fajrTime) {
fajrTime = safeFajr;
}
if (calculationParameters.ishaInterval > 0) {
ishaTime = (0, _DateUtils.dateByAddingMinutes)(sunsetTime, calculationParameters.ishaInterval);
} else {
ishaTime = new _TimeComponents4["default"](solarTime.hourAngle(-1 * calculationParameters.ishaAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); // special case for moonsighting committee above latitude 55
if (calculationParameters.method === 'MoonsightingCommittee' && coordinates.latitude >= 55) {
nightFraction = night / 7;
ishaTime = (0, _DateUtils.dateByAddingSeconds)(sunsetTime, nightFraction);
}
var safeIsha = function () {
if (calculationParameters.method === 'MoonsightingCommittee') {
return _Astronomical["default"].seasonAdjustedEveningTwilight(coordinates.latitude, (0, _DateUtils.dayOfYear)(date), date.getFullYear(), sunsetTime, calculationParameters.shafaq);
} else {
var portion = calculationParameters.nightPortions().isha;
nightFraction = portion * night;
return (0, _DateUtils.dateByAddingSeconds)(sunsetTime, nightFraction);
}
}();
if (isNaN(ishaTime.getTime()) || safeIsha < ishaTime) {
ishaTime = safeIsha;
}
}
maghribTime = sunsetTime;
if (calculationParameters.maghribAngle) {
var angleBasedMaghrib = new _TimeComponents4["default"](solarTime.hourAngle(-1 * calculationParameters.maghribAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());
if (sunsetTime < angleBasedMaghrib && ishaTime > angleBasedMaghrib) {
maghribTime = angleBasedMaghrib;
}
}
var fajrAdjustment = (calculationParameters.adjustments.fajr || 0) + (calculationParameters.methodAdjustments.fajr || 0);
var sunriseAdjustment = (calculationParameters.adjustments.sunrise || 0) + (calculationParameters.methodAdjustments.sunrise || 0);
var dhuhrAdjustment = (calculationParameters.adjustments.dhuhr || 0) + (calculationParameters.methodAdjustments.dhuhr || 0);
var asrAdjustment = (calculationParameters.adjustments.asr || 0) + (calculationParameters.methodAdjustments.asr || 0);
var maghribAdjustment = (calculationParameters.adjustments.maghrib || 0) + (calculationParameters.methodAdjustments.maghrib || 0);
var sunsetAdjustment = (calculationParameters.adjustments.sunset || 0) + (calculationParameters.methodAdjustments.sunset || 0);
var ishaAdjustment = (calculationParameters.adjustments.isha || 0) + (calculationParameters.methodAdjustments.isha || 0);
this.fajr = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(fajrTime, fajrAdjustment), calculationParameters.rounding);
this.sunrise = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(sunriseTime, sunriseAdjustment), calculationParameters.rounding);
this.dhuhr = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(dhuhrTime, dhuhrAdjustment), calculationParameters.rounding);
this.asr = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(asrTime, asrAdjustment), calculationParameters.rounding);
this.sunset = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(sunsetTime, sunsetAdjustment), calculationParameters.rounding);
this.maghrib = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(maghribTime, maghribAdjustment), calculationParameters.rounding);
this.isha = (0, _DateUtils.roundedMinute)((0, _DateUtils.dateByAddingMinutes)(ishaTime, ishaAdjustment), calculationParameters.rounding);
}
_createClass(PrayerTimes, [{
key: "timeForPrayer",
value: function timeForPrayer(prayer) {
if (prayer === _Prayer["default"].Fajr) {
return this.fajr;
} else if (prayer === _Prayer["default"].Sunrise) {
return this.sunrise;
} else if (prayer === _Prayer["default"].Dhuhr) {
return this.dhuhr;
} else if (prayer === _Prayer["default"].Asr) {
return this.asr;
} else if (prayer === _Prayer["default"].Maghrib) {
return this.maghrib;
} else if (prayer === _Prayer["default"].Isha) {
return this.isha;
} else {
return null;
}
}
}, {
key: "currentPrayer",
value: function currentPrayer() {
var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
if (date >= this.isha) {
return _Prayer["default"].Isha;
} else if (date >= this.maghrib) {
return _Prayer["default"].Maghrib;
} else if (date >= this.asr) {
return _Prayer["default"].Asr;
} else if (date >= this.dhuhr) {
return _Prayer["default"].Dhuhr;
} else if (date >= this.sunrise) {
return _Prayer["default"].Sunrise;
} else if (date >= this.fajr) {
return _Prayer["default"].Fajr;
} else {
return _Prayer["default"].None;
}
}
}, {
key: "nextPrayer",
value: function nextPrayer() {
var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
if (date >= this.isha) {
return _Prayer["default"].None;
} else if (date >= this.maghrib) {
return _Prayer["default"].Isha;
} else if (date >= this.asr) {
return _Prayer["default"].Maghrib;
} else if (date >= this.dhuhr) {
return _Prayer["default"].Asr;
} else if (date >= this.sunrise) {
return _Prayer["default"].Dhuhr;
} else if (date >= this.fajr) {
return _Prayer["default"].Sunrise;
} else {
return _Prayer["default"].Fajr;
}
}
}]);
return PrayerTimes;
}();
exports["default"] = PrayerTimes;
//# sourceMappingURL=PrayerTimes.js.map