{"version":3,"file":"index.cjs","sources":["../src/mm-calendar/western-to-julian.ts","../src/mm-calendar/constants.ts","../src/mm-calendar/julian-to-myanmar.ts","../src/mm-calendar/myanmar-year-constants.ts","../src/mm-calendar/myanmar-date.ts","../src/mm-calendar/astro.ts"],"sourcesContent":["import { GREGORIAN_START_IN_ENGLISH_CAL } from \"./constants\";\n\nexport enum CalendarType {\n  English = 0,\n  Gregorian = 1,\n  Julian = 2,\n}\n\n/**\n * Western date ot Julian day number. Credit4 Gregorian 2 JD: (w2j)\n * @see https://cool-emerald.blogspot.com/2013/06/algorithm-program-and-calculation-of.html#jdn\n * @param date western date object\n * @param startOfGregorian start of Gregorian calendar in Julian day number (default 2361222)\n * @param calendarType calendar type (default English)\n * @returns Julian day number\n */\n\nexport const westernToJulianDayNumber = (\n  date: Date,\n  startOfGregorian = GREGORIAN_START_IN_ENGLISH_CAL,\n  calendarType = CalendarType.English\n): number => {\n  // stupid JavaScript month is zero-based\n  let oneBasedMonth = date.getMonth() + 1;\n  let a = Math.floor((14 - oneBasedMonth) / 12);\n  let year = date.getFullYear() + 4800 - a;\n  let month = oneBasedMonth + 12 * a - 3;\n  // Gregorian calendar starts in English calendar on 14 September 1752\n  startOfGregorian =\n    startOfGregorian <= 0 ? GREGORIAN_START_IN_ENGLISH_CAL : startOfGregorian;\n\n  let julianDay =\n    date.getDate() +\n    Math.floor((153 * month + 2) / 5.0) +\n    365 * year +\n    Math.floor(year / 4.0);\n  if (calendarType === CalendarType.Gregorian) {\n    julianDay =\n      julianDay - Math.floor(year / 100.0) + Math.floor(year / 400.0) - 32045;\n  } else if (calendarType === CalendarType.Julian) {\n    julianDay = julianDay - 32083;\n  } else {\n    julianDay =\n      julianDay - Math.floor(year / 100.0) + Math.floor(year / 400.0) - 32045;\n    if (julianDay < startOfGregorian) {\n      julianDay =\n        date.getDate() +\n        Math.floor((153 * month + 2) / 5.0) +\n        (365 * year )+\n        Math.floor(year / 4.0) -\n        32083;\n      if (julianDay > startOfGregorian) {\n        julianDay = startOfGregorian;\n      }\n    }\n  }\n  let fraction = getFractionOfDay(date);\n  return julianDay + fraction;\n};\n\nconst getFractionOfDay = (date: Date) => {\n  return (\n    (date.getHours() - 12) / 24 +\n    date.getMinutes() / 1440 +\n    date.getSeconds() / 86400\n  );\n};\n","/**\n * The original variable names are shown in the comments.\n * https://github.com/chanmratekoko/mmcalendar/blob/master/src/main/java/mmcalendar/Constants.java\n */\n\n/**\n * SY\n * solar year (365.2587565) (1577917828 / 4320000.0)\n */\nexport const SOLAR_YEAR = 365.2587564814815;\n\n/**\n * LM\n * lunar month (29.53058795) (1577917828 / 53433336.0)\n */\n\nexport const LUNAR_MONTH = 29.53058794607172;\n\n/**\n * MO\n * beginning of 0 ME\n * Starting year of Myanmar era (year 0)\n */\nexport const MYANMAR_ERA_START = 1954168.050623;\n\n/**\n * SE3\n * beginning of 3rd era\n */\nexport const THIRD_ERA_START = 1312;\n\n/**\n * BY\n * Beginning of English Calendar\n */\nexport const ENGLISH_CAL_START = 640;\n\n/**\n * EY\n * End of English Calendar\n */\nexport const ENGLISH_CAL_END = 2140;\n\n/**\n * MBY\n * Beginning of Myanmar Calendar\n */\nexport const MYANMAR_CAL_START = 2;\n\n/**\n * MEY\n * End of Myanmar Calendar\n */\nexport const MYANMAR_CAL_END = 1500;\n\n/**\n * LT\n * Minimum accurate English year\n */\nexport const MINIMUM_ACCURATE_ENGLISH_YEAR = 1700;\n\n/**\n * UT\n * Maximum accurate English year\n */\nexport const MAXIMUM_ACCURATE_ENGLISH_YEAR = 2018;\n\n/**\n * MLT\n * Minimum accurate Myanmar year\n */\nexport const MINIMUM_ACCURATE_MYANMAR_YEAR = 1062;\n\n/**\n * MUT\n * Maximum accurate Myanmar year\n */\nexport const MAXIMUM_ACCURATE_MYANMAR_YEAR = 1379;\n\n/**\n * SG\n * Gregorian start in English calendar (1752/Sep/14)\n */\nexport const GREGORIAN_START_IN_ENGLISH_CAL = 2361222;\n\n/**\n * EMA\n * Myanmar month names\n */\nexport const MYANMAR_MONTHS: string[] = [\n  \"First Waso\",\n  \"Tagu\",\n  \"Kason\",\n  \"Nayon\",\n  \"Waso\",\n  \"Wagaung\",\n  \"Tawthalin\",\n  \"Thadingyut\",\n  \"Tazaungmon\",\n  \"Nadaw\",\n  \"Pyatho\",\n  \"Tabodwe\",\n  \"Tabaung\",\n  \"Late Tagu\",\n  \"Late Kason\",\n];\n\n/**\n * MSA\n * New Moon means Dark moon\n */\nexport const MOON_PHASES: string[] = [\n  \"Waxing\",\n  \"Full Moon\",\n  \"Waning\",\n  \"New Moon\",\n];\n\n/**\n * WDA\n * Week Days\n */\nexport const WEEK_DAYS: string[] = [\n  \"Saturday\",\n  \"Sunday\",\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n];\n","import { LUNAR_MONTH, MYANMAR_ERA_START, SOLAR_YEAR } from \"./constants\";\nimport { getMyanmarConstants } from \"./myanmar-year-constants\";\n\n/**\n * Julian day number to Myanmar date\n * @param julianDay : julian day number\n * @returns myanmarYearType = year type [0=common, 1=little watat, 2=big watat]\n * @returns month = [\n * Tagu=1, Kason=2, Nayon=3, 1st Waso=0, 2nd Waso=4,\n * Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8,\n * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12,\n * Late Tagu=13, Late Kason=14]\n * @returns monthType = [0=Hnaung, 1=Oo]\n * @returns monthLength = [29 or 30 days]\n * @returns monthDay = [1 to 30]\n * @returns fortnightDay = [1 to 15]\n * @returns moonPhase = [0=waxing, 1=full moon, 2=waning, 3=new moon]\n * @returns weekDay = [0=sat, 1=sun, 2=mon, 3=tue, 4=wed, 5=thu, 6=fri]\n */\nexport const julianToMyanmarDate = (julianDay: number) => {\n  // convert jd to jdn\n  // jdn\n  let julianDayNumber = Math.round(julianDay);\n  // myear\n  let myanmarYear = Math.floor(\n    (julianDayNumber - 0.5 - MYANMAR_ERA_START) / SOLAR_YEAR\n  );\n  // check year\n  let yo = checkMyanmarYear(myanmarYear);\n  // dd\n  let dayCount = julianDayNumber - yo.tagu1 + 1;\n  let b =Math.floor( yo.myanmarYearType / 2);\n  // big wa and common year\n  let c = Math.floor(1 / (yo.myanmarYearType + 1));\n  // year length\n  let yearLength = 354 + (1 - c) * 30 + b;\n  // month type: Hnaung = 1 or Oo = 0 | late = 1 or early = 0\n  let monthType = Math.floor((dayCount -1)/yearLength);\n  dayCount -= monthType * yearLength;\n  // adjust day count and threshold\n  let a = Math.floor((dayCount + 423) / 512);\n  // month\n  let month = Math.floor((dayCount - b * a + c * a * 30 + 29.26) / 29.544);\n  let e =Math.floor( (month + 12) / 16);\n  let f = Math.floor((month + 11) / 16);\n  // day of month\n  let monthDay =\n    dayCount - Math.floor(29.544 * month - 29.26) - b * e + c * f * 30;\n    \n  // adjust month numbers for late months\n  month += f * 3 - e * 4 + 12 * monthType;\n  let monthLength = 30 - (month % 2);\n\n  if (month === 3) {\n    // adjust if Nayon in big watat\n    monthLength += yo.myanmarYearType / 2;\n  }\n  // moon phase from day of the month, month, and year type\n  // [0=waxing, 1=full moon, 2=waning, 3=new moon]\n  let moonPhase = (monthDay + 1) / 16 + monthDay / 16 + monthDay / monthLength;\n\n  // fortnight day from month day\n  // waxing or waning day\n  let fortnightDay = monthDay - 15 * (monthDay / 16);\n  // week day\n  let weekDay = (julianDayNumber + 2) % 7;\n  return {\n    myanmarYear,\n    myanmarYearType: yo.myanmarYearType,\n    yearLength,\n    month,\n    monthType,\n    monthLength,\n    monthDay,\n    // moonPhase,\n    // fortnightDay,\n    weekDay,\n    julianDay,\n  };\n};\n\n/**\n * Check watat (intercalary month) (chk_watat)\n * @param myanmarYear Myanmar year\n * @returns watat = intercalary month [1=watat, 0=common]\n * @returns fm = full moon day of 2nd Waso in jdn_mm (jdn+6.5 for MMT) [only valid when watat=1]\n */\nexport const checkWatat = (myanmarYear: number) => {\n  // get constants for the corresponding calendar era\n  let myanmarConstants = getMyanmarConstants(myanmarYear);\n  // threshold to adjust\n  let threshold =\n    (SOLAR_YEAR / 12 - LUNAR_MONTH) * (12 - myanmarConstants.NUMBER_OF_MONTHS);\n  // excess day\n  let excessDays = (SOLAR_YEAR * (myanmarYear + 3739)) % LUNAR_MONTH;\n\n  if (excessDays < threshold) {\n    // adjust excess days\n    excessDays += LUNAR_MONTH;\n  }\n  // full moon day of 2nd Waso\n  let fullMoon = Math.round(\n    SOLAR_YEAR * myanmarYear +\n      MYANMAR_ERA_START -\n      excessDays +\n      4.5 * LUNAR_MONTH +\n      myanmarConstants.WATAT_OFFSET\n  );\n  let watat = 0;\n  // find watat\n  if (myanmarConstants.ERA_ID >= 2) {\n    // if 2nd era or later, find watat based on excess days\n    let tw =\n      LUNAR_MONTH -\n      (SOLAR_YEAR / 12 - LUNAR_MONTH) * myanmarConstants.NUMBER_OF_MONTHS;\n    if (excessDays >= tw) {\n      watat = 1;\n    }\n  } else {\n    // if 1st era, find watat by 19 years metonic cycle\n    // Myanmar year is divided by 19 and there is an intercalary month\n    // if the remainder is 2, 5, 7, 10, 13, 15, 18\n    // https://github.com/kanasimi/CeJS/blob/master/data/date/calendar.js#L2330\n    watat = (myanmarYear * 7 + 2) % 19;\n    if (watat < 0) {\n      watat += 19;\n    }\n    watat = Math.floor(watat / 12.0);\n  }\n  // correct watat exceptions\n  watat ^= myanmarConstants.EXCEPTION_IN_WATAT_YEAR;\n  return {\n    fullMoon, // fm\n    watat, // watat\n  };\n};\n\n/**\n * Check Myanamr year (chk_my)\n * depenency: chk_watat(my)\n * @param myanmarYear Myanmar year\n * @returns map\n * myanmarYearType = year type [0=common, 1=little watat, 2=big watat] (myt)\n * tagu1 = the 1st day of Tagu as Julian Day Number (Julian Day Number for MMT) tg1\n * fullMoon = full moon day of [2nd] Waso as Julian Day Number (fm)\n * watatError = [0=ok, 1=error] (werr)\n */\nexport const checkMyanmarYear = (myanmarYear: number) => {\n  let y2 = checkWatat(myanmarYear);\n  let myanmarYearType = y2!.watat;\n\n  let yd = 0;\n  let y1:\n    | {\n        fullMoon: number;\n        watat: number;\n      }\n    | undefined = undefined;\n\n  do {\n    yd++;\n    y1 = checkWatat(myanmarYear - yd);\n  } while (y1!.watat === 0 && yd < 3);\n\n  let fullMoon: number = 0;\n  let watatError = 0;\n\n  if (myanmarYearType) {\n    let nd = (y2!.fullMoon - y1!.fullMoon) % 354;\n    myanmarYearType = Math.floor(nd / 31) + 1;\n    fullMoon = y2!.fullMoon;\n    if (nd != 30 && nd != 31) {\n      watatError = 1;\n    }\n  } else {\n    fullMoon = y1!.fullMoon + 354 * yd;\n\n  }\n\n  let tagu1 = y1!.fullMoon + 354 * yd - 102;\n  return {\n    myanmarYearType, // myt\n    tagu1, // tg1\n    fullMoon: fullMoon, // fm\n    watatError, // werr\n  };\n};\n","/**\n * Get Myanmar year constants depending on era\n * @param myanmarYear Myanmar year\n * @returns map\n * ERA_ID = Myanmar calendar era id [1-3] (EI)\n * WATAT_OFFSET = watat offset to compensate (WO)\n * NUMBER_OF_MONTHS = number of months to find excess days (NM)\n * EXCEPTION_IN_WATAT_YEAR = exception in watat year (EW)\n */\nexport const getMyanmarConstants = (myanmarYear: number) => {\n  let eraId: number;\n  let watatOffset: number;\n  let numberOfMonths: number;\n  let exceptionInWatatYear = 0;\n  let fullmoonExceptions: number[][];\n  let watatExceptions: number[];\n  let i: number;\n\n  // the third era (the era after Independence 1312 ME and after)\n  if (myanmarYear > 1312) {\n    eraId = 3;\n    watatOffset = -0.5;\n    numberOfMonths = 8;\n    fullmoonExceptions = [[1377, 1]];\n    watatExceptions = [1344, 1345];\n  }\n  // The second era (the era under British colony: 1217 ME to 1311 ME)\n  else if (myanmarYear >= 1217) {\n    eraId = 2;\n    watatOffset = -1;\n    numberOfMonths = 4;\n    fullmoonExceptions = [\n      [1234, 1],\n      [1261, -1],\n    ];\n    watatExceptions = [1263, 1264];\n  }\n  // The first era (the era of Myanmar kings: 1216 ME and before)\n  // Thandeikta (ME 1100 - 1216)\n  else if (myanmarYear >= 1100) {\n    eraId = 1.3;\n    watatOffset = -0.85;\n    numberOfMonths = -1;\n    fullmoonExceptions = [\n      [1120, 1],\n      [1126, -1],\n      [1150, 1],\n      [1172, -1],\n      [1207, 1],\n    ];\n    watatExceptions = [1201, 1202];\n  }\n  // Makaranta system 2 (ME 798 - 1099)\n  else if (myanmarYear >= 798) {\n    eraId = 1.2;\n    watatOffset = -1.1;\n    numberOfMonths = -1;\n    fullmoonExceptions = [\n      [813, -1],\n      [849, -1],\n      [851, -1],\n      [854, -1],\n      [927, -1],\n      [933, -1],\n      [936, -1],\n      [938, -1],\n      [949, -1],\n      [952, -1],\n      [963, -1],\n      [968, -1],\n      [1039, -1],\n    ];\n    watatExceptions = [];\n  }\n  // Makaranta system 1 (ME 0 - 797)\n  else {\n    eraId = 1.1;\n    watatOffset = -1.1;\n    numberOfMonths = -1;\n    fullmoonExceptions = [\n      [205, 1],\n      [246, 1],\n      [471, 1],\n      [572, -1],\n      [651, 1],\n      [653, 2],\n      [656, 1],\n      [672, 1],\n      [729, 1],\n      [767, -1],\n    ];\n    watatExceptions = [];\n  }\n  i = bSearch2(myanmarYear, fullmoonExceptions);\n  if (i >= 0) {\n    // full moon day offset exceptions\n    watatOffset += fullmoonExceptions[i][1];\n  }\n  i = bSearch1(myanmarYear, watatExceptions);\n  if (i >= 0) {\n    // correct watat exceptions\n    exceptionInWatatYear = 1;\n  }\n  return {\n    ERA_ID: eraId, // EI\n    WATAT_OFFSET: watatOffset, // WO\n    NUMBER_OF_MONTHS: numberOfMonths, // NM\n    EXCEPTION_IN_WATAT_YEAR: exceptionInWatatYear, // EW\n  };\n};\n\n// Binary search for array with two elements\nconst bSearch2 = (key: number, arr: number[][]) => {\n  let i = 0;\n  let l = 0;\n  let u = arr.length - 1;\n  while (u >= l) {\n    i = Math.floor((l + u) / 2);\n    if (arr[i][0] > key) u = i - 1;\n    else if (arr[i][0] < key) l = i + 1;\n    else return i;\n  }\n  return -1;\n};\n\nconst bSearch1 = (key: number, arr: number[]) => {\n  let i = 0;\n  let l = 0;\n  let u = arr.length - 1;\n  while (u >= l) {\n    i = Math.floor((l + u) / 2);\n    if (arr[i] > key) u = i - 1;\n    else if (arr[i] < key) l = i + 1;\n    else return i;\n  }\n  return -1;\n};\n","import { julianToMyanmarDate } from \"./julian-to-myanmar\";\nimport { westernToJulianDayNumber } from \"./western-to-julian\";\n\nexport const getMyanmarDate = (date: Date) => {\n  return julianToMyanmarDate(westernToJulianDayNumber(date));\n};\n","import { getMyanmarDate } from \"./myanmar-date\";\n\n/**\n * Checking Astrological days\n * More details @ http://cool-emerald.blogspot.sg/2013/12/myanmar-astrological-calendar-days.html\n * Get sabbath day and sabbath eve from JS date object.\n * The API deviates from the original implementation. But, should output the same result.\n * @param date JS date object\n * @returns [1=sabbath, 2=sabbath eve, 0=else]\n */\nexport const isSabbath = (date: Date) => {\n  const { monthLength, monthDay, myanmarYearType } = getMyanmarDate(date);\n  let isSabbath = 0;\n  if (\n    monthDay === 8 ||\n    monthDay === 15 ||\n    monthDay === 23 ||\n    monthDay === monthLength\n  ) {\n    isSabbath = 1;\n  }\n  if (\n    monthDay === 7 ||\n    monthDay === 14 ||\n    monthDay === 22 ||\n    monthDay === monthLength - 1\n  ) {\n    isSabbath = 2;\n  }\n  return isSabbath;\n};\n"],"names":["CalendarType","SOLAR_YEAR","LUNAR_MONTH","MYANMAR_ERA_START","GREGORIAN_START_IN_ENGLISH_CAL","julianToMyanmarDate","julianDay","julianDayNumber","Math","round","myanmarYear","floor","yo","checkMyanmarYear","dayCount","tagu1","b","myanmarYearType","c","yearLength","monthType","a","month","e","f","monthDay","monthLength","weekDay","checkWatat","myanmarConstants","eraId","watatOffset","numberOfMonths","fullmoonExceptions","watatExceptions","i","exceptionInWatatYear","key","arr","l","u","length","bSearch2","bSearch1","ERA_ID","WATAT_OFFSET","NUMBER_OF_MONTHS","EXCEPTION_IN_WATAT_YEAR","getMyanmarConstants","excessDays","fullMoon","watat","y2","yd","y1","undefined","watatError","nd","westernToJulianDayNumber","date","startOfGregorian","calendarType","English","oneBasedMonth","getMonth","year","getFullYear","getDate","Gregorian","Julian","getFractionOfDay","getHours","getMinutes","getSeconds","getMyanmarDate","_getMyanmarDate","isSabbath"],"mappings":"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"}