All files / nanakshahi-js/lib getGurpurabsForMonth.js

25% Statements 6/24
0% Branches 0/7
0% Functions 0/4
25% Lines 6/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 993x 3x 3x 3x 3x                                                                                                                                                                                         3x  
const findMovableGurpurab = require( './findMovableGurpurab' )
const getDateFromNanakshahi = require( './getDateFromNanakshahi' )
const getNanakshahiDate = require( './getNanakshahiDate' )
const { gurpurabs, months } = require( './consts' )
const { leapYear, toGurmukhiNum } = require( './utils' )
 
/**
 * Returns all Gurpurabs for a Nanakshahi Month
 * @param {!number} month Nanakshahi Month, 1-12
 * @param {!number} [year] Nanakshahi Year. Default is current Nanakshahi Year.
 * @return {Object} Gurpurabs for the month with Date and name in English and Punjabi
 * @example getGurpurabsForMonth( 1 )
 */
function getGurpurabsForMonth( month, year = getNanakshahiDate().englishDate.year ) {
  // Get Fesitval dates for specific Nanakshahi Month
  const calendarDates = gurpurabs[ month ]
 
  // Go though list and add dates
  const gurpurabsList = []
  calendarDates.forEach( value => {
    const nanakshahiDate = getDateFromNanakshahi( year, month, value.date )
    gurpurabsList.push( {
      date: {
        gregorianDate: nanakshahiDate.gregorianDate,
        nanakshahiDate: {
          englishDate: {
            date: nanakshahiDate.englishDate.date,
            day: nanakshahiDate.englishDate.day,
          },
          punjabiDate: {
            date: nanakshahiDate.punjabiDate.date,
            day: nanakshahiDate.punjabiDate.day,
          },
        },
      },
      gurpurabs: value.gurpurabs,
    } )
  } )
 
  // Length of Nanakshahi Months
  const monthLength = [
    31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 30,
    leapYear( year + 1468 ) ? 31 : 30, // Phagun Leap Check
  ]
 
  // Check all moveable gurpurabs fall in Nanakshahi month
  const startMonth = getDateFromNanakshahi( year, month, 1 ).gregorianDate
  const movableGurpurabs = [ 'ravidaas', 'holla', 'kabeer', 'bandichhorr', 'naamdev', 'gurunanak' ]
  movableGurpurabs.forEach( value => {
    const { gregorianDate, name } = findMovableGurpurab( value, startMonth.getFullYear() )
    const diffDays = ( gregorianDate.getTime() - startMonth.getTime() ) / ( 1000 * 60 * 60 * 24 )
    if ( diffDays < monthLength[ month - 1 ] && diffDays >= 0 ) {
      const { englishDate, punjabiDate } = getNanakshahiDate( gregorianDate )
      gurpurabsList.push( {
        date: {
          gregorianDate,
          nanakshahiDate: {
            englishDate: {
              date: englishDate.date,
              day: englishDate.day,
            },
            punjabiDate: {
              date: punjabiDate.date,
              day: punjabiDate.day,
            },
          },
        },
        gurpurabs: [ name ],
      } )
    }
  } )
 
  // Sort gurpurabs based on Nanakshahi Date
  gurpurabsList.sort( ( a, b ) => (
    a.date.nanakshahiDate.englishDate.date - b.date.nanakshahiDate.englishDate.date
  ) )
 
  // Add month metadata
  const nanakshahiMonth = {
    englishMonth: {
      month,
      monthName: months[ month - 1 ].en,
      year,
    },
    punjabiMonth: {
      month: toGurmukhiNum( month ),
      monthName: months[ month - 1 ].pa,
      year: toGurmukhiNum( year ),
    },
  }
 
  return {
    nanakshahiMonth,
    gurpurabs: gurpurabsList,
  }
}
 
module.exports = getGurpurabsForMonth