+1
-1
| { | ||
| "name": "kenat", | ||
| "version": "2.0.1", | ||
| "version": "2.0.2", | ||
| "description": "A JavaScript library for the Ethiopian calendar with date and time support.", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
+46
-53
@@ -15,3 +15,2 @@ import { validateNumericInputs, getWeekday } from './utils.js'; | ||
| /** | ||
@@ -29,30 +28,11 @@ * Calculates all Bahire Hasab values for a given Ethiopian year, including all movable feasts. | ||
| const ameteAlem = 5500 + ethiopianYear; | ||
| const meteneRabiet = Math.floor(ameteAlem / 4); | ||
| const evangelistRemainder = ameteAlem % 4; | ||
| const base = _calculateBahireHasabBase(ethiopianYear); | ||
| const evangelistRemainder = base.ameteAlem % 4; | ||
| const evangelistName = evangelistNames[lang]?.[evangelistRemainder] || evangelistNames.english[evangelistRemainder]; | ||
| const tinteQemer = (ameteAlem + meteneRabiet) % 7; | ||
| const tinteQemer = (base.ameteAlem + base.meteneRabiet) % 7; | ||
| const weekdayIndex = (tinteQemer + 1) % 7; | ||
| const newYearWeekday = daysOfWeek[lang]?.[weekdayIndex] || daysOfWeek.english[weekdayIndex]; | ||
| const medeb = ameteAlem % 19; | ||
| const wenber = medeb === 0 ? 18 : medeb - 1; | ||
| const abektie = (wenber * 11) % 30; | ||
| const metqi = (wenber * 19) % 30; | ||
| const bealeMetqiMonth = metqi > 14 ? 1 : 2; | ||
| const bealeMetqiDay = metqi; | ||
| const bealeMetqiDate = { year: ethiopianYear, month: bealeMetqiMonth, day: bealeMetqiDay }; | ||
| const bealeMetqiWeekday = daysOfWeek.english[getWeekday(bealeMetqiDate)]; | ||
| const tewsak = tewsakMap[bealeMetqiWeekday]; | ||
| const mebajaHamerSum = bealeMetqiDay + tewsak; | ||
| const mebajaHamer = mebajaHamerSum > 30 ? mebajaHamerSum % 30 : mebajaHamerSum; | ||
| let ninevehMonth = metqi > 14 ? 5 : 6; | ||
| if (mebajaHamerSum > 30) ninevehMonth++; | ||
| const ninevehDate = { year: ethiopianYear, month: ninevehMonth, day: mebajaHamer }; | ||
| const movableFeasts = {}; | ||
@@ -66,3 +46,3 @@ const tewsakToKeyMap = Object.entries(keyToTewsakMap).reduce((acc, [key, val]) => { | ||
| if (holidayKey) { | ||
| const date = addDays(ninevehDate, movableHolidayTewsak[tewsakKey]); | ||
| const date = addDays(base.ninevehDate, movableHolidayTewsak[tewsakKey]); | ||
| const info = holidayInfo[holidayKey]; | ||
@@ -78,3 +58,3 @@ const rules = movableHolidays[holidayKey]; | ||
| ethiopian: date, | ||
| gregorian: toGC(date.year, date.month, date.day) // <-- ADDED: Include Gregorian date | ||
| gregorian: toGC(date.year, date.month, date.day) | ||
| }; | ||
@@ -85,10 +65,13 @@ } | ||
| return { | ||
| ameteAlem, | ||
| meteneRabiet, | ||
| ameteAlem: base.ameteAlem, | ||
| meteneRabiet: base.meteneRabiet, | ||
| evangelist: { name: evangelistName, remainder: evangelistRemainder }, | ||
| newYear: { dayName: newYearWeekday, tinteQemer: tinteQemer }, | ||
| medeb, wenber, abektie, metqi, | ||
| bealeMetqi: { date: bealeMetqiDate, weekday: bealeMetqiWeekday }, | ||
| mebajaHamer, | ||
| nineveh: ninevehDate, | ||
| medeb: base.medeb, | ||
| wenber: base.wenber, | ||
| abektie: base.abektie, | ||
| metqi: base.metqi, | ||
| bealeMetqi: { date: base.bealeMetqiDate, weekday: base.bealeMetqiWeekday }, | ||
| mebajaHamer: base.mebajaHamer, | ||
| nineveh: base.ninevehDate, | ||
| movableFeasts | ||
@@ -116,3 +99,3 @@ }; | ||
| const { ninevehDate } = _calculateBahireHasabBase(ethiopianYear); // Using the DRY helper | ||
| const { ninevehDate } = _calculateBahireHasabBase(ethiopianYear); | ||
@@ -124,20 +107,18 @@ return addDays(ninevehDate, tewsak); | ||
| /** | ||
| * Calculates base values for the Bahire Hasab system for a given Ethiopian year, | ||
| * primarily determining the date of the Fast of Nineveh (ጾመ ነነዌ - Tsome Nenewē). | ||
| * Calculates and returns all base values for the Bahire Hasab system for a given Ethiopian year. | ||
| * This helper is the single source of truth for the core computational logic. | ||
| * | ||
| * The Bahire Hasab is the traditional Ethiopian Orthodox Tewahedo Church system | ||
| * for calculating movable feasts and fasts. This function computes key intermediate | ||
| * values like 'Metqi' (the date on which the year's cycle is proclaimed) and uses | ||
| * them to find the start date of the Fast of Nineveh. | ||
| * | ||
| * Note: This function relies on external `tewsakMap`, `daysOfWeek.english`, and `getWeekday` | ||
| * which are not defined within its scope but are expected to be available. | ||
| * | ||
| * @param {number} ethiopianYear - The Ethiopian year for which to perform the calculations. | ||
| * @returns {{ ninevehDate: { year: number, month: number, day: number } }} An object containing the calculated date of the Fast of Nineveh. | ||
| * - ninevehDate: An object representing the date of the Fast of Nineveh. | ||
| * - year: The Ethiopian year (this will be the same as the input `ethiopianYear`). | ||
| * - month: The Ethiopian month (typically ranging from 5 to 7, e.g., Ter, Yekatit, or Megabit) | ||
| * in which the Fast of Nineveh begins. Ethiopian months are 1-indexed (1 for Meskerem, ..., 13 for Pagume). | ||
| * - day: The Ethiopian day of the month (1-30) on which the Fast of Nineveh begins. | ||
| * @returns {{ | ||
| * ameteAlem: number, | ||
| * meteneRabiet: number, | ||
| * medeb: number, | ||
| * wenber: number, | ||
| * abektie: number, | ||
| * metqi: number, | ||
| * bealeMetqiDate: { year: number, month: number, day: number }, | ||
| * bealeMetqiWeekday: string, | ||
| * mebajaHamer: number, | ||
| * ninevehDate: { year: number, month: number, day: number } | ||
| * }} An object containing all core calculated values. | ||
| */ | ||
@@ -147,5 +128,5 @@ function _calculateBahireHasabBase(ethiopianYear) { | ||
| const meteneRabiet = Math.floor(ameteAlem / 4); | ||
| const medeb = ameteAlem % 19; | ||
| const wenber = medeb === 0 ? 18 : medeb - 1; | ||
| const abektie = (wenber * 11) % 30; | ||
| const metqi = (wenber * 19) % 30; | ||
@@ -157,3 +138,4 @@ | ||
| const tewsak = tewsakMap[daysOfWeek.english[getWeekday(bealeMetqiDate)]]; | ||
| const bealeMetqiWeekday = daysOfWeek.english[getWeekday(bealeMetqiDate)]; | ||
| const tewsak = tewsakMap[bealeMetqiWeekday]; | ||
| const mebajaHamerSum = bealeMetqiDay + tewsak; | ||
@@ -166,3 +148,14 @@ const mebajaHamer = mebajaHamerSum > 30 ? mebajaHamerSum % 30 : mebajaHamerSum; | ||
| return { ninevehDate }; | ||
| } | ||
| return { | ||
| ameteAlem, | ||
| meteneRabiet, | ||
| medeb, | ||
| wenber, | ||
| abektie, | ||
| metqi, | ||
| bealeMetqiDate, | ||
| bealeMetqiWeekday, | ||
| mebajaHamer, | ||
| ninevehDate, | ||
| }; | ||
| } |
445291
-0.26%3435
-0.06%