{"version":3,"file":"feiertage.umd.cjs","sources":["../src/german-translations.ts","../src/holiday-type.ts","../src/regions.ts","../src/feiertage.ts"],"sourcesContent":["import { TranslationTable } from './feiertage';\n\nexport const germanTranslations: TranslationTable = {\n  NEUJAHRSTAG: 'Neujahrstag',\n  HEILIGEDREIKOENIGE: 'Heilige Drei Könige',\n  KARFREITAG: 'Karfreitag',\n  OSTERSONNTAG: 'Ostersonntag',\n  OSTERMONTAG: 'Ostermontag',\n  TAG_DER_ARBEIT: 'Tag der Arbeit',\n  CHRISTIHIMMELFAHRT: 'Christi Himmelfahrt',\n  PFINGSTSONNTAG: 'Pfingstsonntag',\n  PFINGSTMONTAG: 'Pfingstmontag',\n  FRONLEICHNAM: 'Fronleichnam',\n  MARIAHIMMELFAHRT: 'Mariä Himmelfahrt',\n  DEUTSCHEEINHEIT: 'Tag der Deutschen Einheit',\n  REFORMATIONSTAG: 'Reformationstag',\n  ALLERHEILIGEN: 'Allerheiligen',\n  BUBETAG: 'Buß- und Bettag',\n  ERSTERWEIHNACHTSFEIERTAG: '1. Weihnachtstag',\n  ZWEITERWEIHNACHTSFEIERTAG: '2. Weihnachtstag',\n  WELTKINDERTAG: 'Weltkindertag',\n  WELTFRAUENTAG: 'Weltfrauentag',\n  AUGSBURGER_FRIEDENSFEST: 'Augsburger Friedensfest',\n};\n","export type HolidayType =\n  | 'NEUJAHRSTAG'\n  | 'HEILIGEDREIKOENIGE'\n  | 'KARFREITAG'\n  | 'OSTERSONNTAG'\n  | 'OSTERMONTAG'\n  | 'TAG_DER_ARBEIT'\n  | 'CHRISTIHIMMELFAHRT'\n  | 'MARIAHIMMELFAHRT'\n  | 'PFINGSTSONNTAG'\n  | 'PFINGSTMONTAG'\n  | 'FRONLEICHNAM'\n  | 'DEUTSCHEEINHEIT'\n  | 'REFORMATIONSTAG'\n  | 'ALLERHEILIGEN'\n  | 'BUBETAG'\n  | 'ERSTERWEIHNACHTSFEIERTAG'\n  | 'ZWEITERWEIHNACHTSFEIERTAG'\n  | 'WELTKINDERTAG'\n  | 'WELTFRAUENTAG'\n  | 'AUGSBURGER_FRIEDENSFEST';\n\nexport const allHolidays: HolidayType[] = [\n  'NEUJAHRSTAG',\n  'HEILIGEDREIKOENIGE',\n  'KARFREITAG',\n  'OSTERSONNTAG',\n  'OSTERMONTAG',\n  'TAG_DER_ARBEIT',\n  'CHRISTIHIMMELFAHRT',\n  'MARIAHIMMELFAHRT',\n  'PFINGSTSONNTAG',\n  'PFINGSTMONTAG',\n  'FRONLEICHNAM',\n  'DEUTSCHEEINHEIT',\n  'REFORMATIONSTAG',\n  'ALLERHEILIGEN',\n  'BUBETAG',\n  'ERSTERWEIHNACHTSFEIERTAG',\n  'ZWEITERWEIHNACHTSFEIERTAG',\n  'WELTKINDERTAG',\n  'WELTFRAUENTAG',\n  'AUGSBURGER_FRIEDENSFEST',\n];\n","export type Region =\n  | 'BW' // Baden-Württemberg\n  | 'BY' // Bayern\n  | 'BE' // Berlin\n  | 'BB' // Brandenburg\n  | 'HB' // Bremen\n  | 'HE' // Hessen\n  | 'HH' // Hamburg\n  | 'MV' // Mecklenburg-Vorpommern\n  | 'NI' // Niedersachsen\n  | 'NW' // Nordrhein-Westfalen\n  | 'RP' // Rheinland-Pfalz\n  | 'SL' // Saarland\n  | 'SN' // Sachsen\n  | 'ST' // Sachsen-Anhalt\n  | 'SH' // Schleswig-Holstein\n  | 'TH' // Thüringen\n  | 'BUND' // Gesamt-Deutschland\n  // Custom regions with local holidays (incomplete) !\n  | 'AUGSBURG'\n  | 'ALL';\n\nexport const allRegions: Region[] = [\n  'BW',\n  'BY',\n  'BE',\n  'BB',\n  'HB',\n  'HE',\n  'HH',\n  'MV',\n  'NI',\n  'NW',\n  'RP',\n  'SL',\n  'SN',\n  'ST',\n  'SH',\n  'TH',\n  'BUND',\n  'AUGSBURG',\n  'ALL',\n];\n","/*!\n * feiertage.js\n * @repository https://github.com/sfakir/feiertagejs\n * @docs https://github.com/sfakir/feiertagejs/blob/master/docs.md\n *\n * Copyright 2015-2021 Simon Fakir\n * Released under the MIT license\n */\n\n//\n// Additional readings\n// - how to format a javascript date: http://blog.stevenlevithan.com/archives/date-time-format\n// - the right javascript date: http://stackoverflow.com/questions/10286204/the-right-json-date-format\n//\n\nimport { germanTranslations } from './german-translations';\nimport { Holiday } from './holiday';\nimport { allHolidays, HolidayType } from './holiday-type';\nimport { allRegions, Region } from './regions';\n\n// translations\n\nconst defaultLanguage = 'de';\nlet currentLanguage: string = defaultLanguage;\n\n/**\n * Map of {@link HolidayType} to translation string.\n */\nexport type TranslationTable = { [key in HolidayType]?: string };\n\nconst translations: { [key: string]: TranslationTable } = {\n  de: germanTranslations,\n};\n\n/**\n * adds a translation for the holidays (e.g. english).\n * This also allows to override the German names.\n * Hint: Interpolates German for missing translations\n * @param {string} isoCode of the new language\n * @param {TranslationTable} newTranslation  map of {HolidayType} to translation stringg\n */\nexport function addTranslation(\n  isoCode: string,\n  newTranslation: TranslationTable,\n): void {\n  const code = isoCode.toLowerCase();\n  const defaultTranslation = translations[defaultLanguage];\n  let missingFields = false;\n\n  // fill new Translation with default Language\n  for (const holiday of allHolidays) {\n    if (!newTranslation[holiday]) {\n      missingFields = true;\n      newTranslation[holiday] = defaultTranslation[holiday];\n    }\n  }\n  if (missingFields) {\n    console.warn(\n      '[feiertagejs] addTranslation: you did not add all holidays in your translation! Took German as fallback',\n    );\n  }\n\n  translations[code] = newTranslation;\n}\n\n/**\n * Set a language to default language\n * @param {string} isoCode\n */\nexport function setLanguage(isoCode: string): void {\n  const code = isoCode.toLowerCase();\n  if (!translations[code]) {\n    throw new TypeError(\n      `[feiertagejs] tried to set language to ${code} but the translation is missing. Please use addTranslation(isoCode,object) first`,\n    );\n  }\n  currentLanguage = isoCode;\n}\n\n/**\n * Get currently set language\n * @returns {string}\n */\nexport function getLanguage(): string {\n  return currentLanguage;\n}\n\n// holidays api\n\n/**\n * Checks if a specific date is sunday or holiday.\n * @param date\n * @param region\n * @returns {boolean}\n */\nexport function isSunOrHoliday(date: Date, region: Region): boolean {\n  checkRegion(region);\n  return date.getDay() === 0 || isHoliday(date, region);\n}\n\n/**\n * Check is specific date is holiday.\n * @param date\n * @param {Region} region two character {@link Region} code\n * @returns {boolean}\n */\nexport function isHoliday(date: Date, region: Region): boolean {\n  checkRegion(region);\n\n  const year = date.getFullYear();\n  const internalDate = toUtcTimestamp(date);\n  const holidays = getHolidaysAsUtcTimestamps(year, region);\n\n  return holidays.indexOf(internalDate) !== -1;\n}\n\nexport function getHolidayByDate(\n  date: Date,\n  region: Region = 'ALL',\n): Holiday | void {\n  checkRegion(region);\n  const holidays = getHolidaysOfYear(date.getFullYear(), region);\n  return holidays.find((holiday) => holiday.equals(date));\n}\n\n// additional runtime checks\n\n/**\n * Checks if the given region is a valid {@link Region}.\n *\n * @param region {@link Region} to check\n * @throws {Error}\n * @private\n */\nfunction checkRegion(region?: Region): void {\n  if (region === null || region === undefined) {\n    throw new Error(`Region must not be undefined or null`);\n  }\n  if (allRegions.indexOf(region) === -1) {\n    throw new Error(\n      `Invalid region: ${region}! Must be one of ${allRegions.toString()}`,\n    );\n  }\n}\n\n/**\n * Checks if the given holidayName is a valid {@link HolidayType}.\n * @param holidayName {@link HolidayType} to check\n * @throws {Error}\n * @private\n */\nfunction checkHolidayType(holidayName?: HolidayType): void {\n  if (holidayName === null || holidayName === undefined) {\n    throw new TypeError('holidayName must not be null or undefined');\n  }\n  if (allHolidays.indexOf(holidayName) === -1) {\n    throw new Error(\n      `feiertage.js: invalid holiday type \"${holidayName}\"! Must be one of ${allHolidays.toString()}`,\n    );\n  }\n}\n\nexport function isSpecificHoliday(\n  date: Date,\n  holidayName: HolidayType,\n  region: Region = 'ALL',\n): boolean {\n  checkRegion(region);\n  checkHolidayType(holidayName);\n  const holidays = getHolidaysOfYear(date.getFullYear(), region);\n  const foundHoliday = holidays.find((holiday) => holiday.equals(date));\n  if (!foundHoliday) {\n    return false;\n  }\n  return foundHoliday.name === holidayName;\n}\n\n/**\n * Returns all holidays of a year in a {@link Region}.\n * @param year\n * @param region\n * @returns {Array.<Holiday>}\n */\nexport function getHolidays(year: number | string, region: Region): Holiday[] {\n  let y: number;\n  if (typeof year === 'string') {\n    y = parseInt(year, 10);\n  } else {\n    y = year;\n  }\n\n  checkRegion(region);\n  return getHolidaysOfYear(y, region);\n}\n\n/**\n *\n * @param {number} year\n * @param region\n * @returns {number[]}\n * @private\n */\nfunction getHolidaysAsUtcTimestamps(year: number, region: Region): number[] {\n  const holidays = getHolidaysOfYear(year, region);\n  return holidays.map((holiday) => toUtcTimestamp(holiday.date));\n}\n\n/**\n *\n * @param {number} year\n * @param region\n * @returns {{objects: Array.<Holiday>, integers}}\n * @private\n */\nfunction getHolidaysOfYear(year: number, region: Region): Holiday[] {\n  const easterDate = getEasterDate(year);\n  const karfreitag = addDays(new Date(easterDate.getTime()), -2);\n  const ostermontag = addDays(new Date(easterDate.getTime()), 1);\n  const christiHimmelfahrt = addDays(new Date(easterDate.getTime()), 39);\n  const pfingstsonntag = addDays(new Date(easterDate.getTime()), 49);\n  const pfingstmontag = addDays(new Date(easterDate.getTime()), 50);\n\n  const holidays: Holiday[] = [\n    ...getCommonHolidays(year),\n    newHoliday('KARFREITAG', karfreitag, ['ALL']),\n    newHoliday('OSTERMONTAG', ostermontag, ['ALL']),\n    newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt, ['ALL']),\n    newHoliday('PFINGSTMONTAG', pfingstmontag, ['ALL']),\n  ];\n\n  addHeiligeDreiKoenige(year, region, holidays);\n  addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, holidays);\n  addFronleichnam(region, easterDate, holidays);\n  addMariaeHimmelfahrt(year, region, holidays);\n  addReformationstag(year, region, holidays);\n  addAllerheiligen(year, region, holidays);\n  addBussUndBetttag(year, region, holidays);\n  addWeltkindertag(year, region, holidays);\n  addWeltfrauenTag(year, region, holidays);\n\n  addRegionalHolidays(year, region, holidays);\n\n  return holidays.sort(\n    (a: Holiday, b: Holiday) => a.date.getTime() - b.date.getTime(),\n  );\n}\n\nfunction getCommonHolidays(year: number): Holiday[] {\n  return [\n    newHoliday('NEUJAHRSTAG', makeDate(year, 1, 1), ['ALL']),\n    newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1), ['ALL']),\n    newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3), ['ALL']),\n    newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25), ['ALL']),\n    newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26), ['ALL']),\n  ];\n}\nfunction addRegionalHolidays(\n  year: number,\n  region: Region,\n  feiertageObjects: Holiday[],\n) {\n  if (region === 'AUGSBURG') {\n    feiertageObjects.push(\n      newHoliday('AUGSBURGER_FRIEDENSFEST', makeDate(year, 8, 8), ['AUGSBURG']),\n    );\n  }\n}\nfunction addHeiligeDreiKoenige(\n  year: number,\n  region: Region,\n  feiertageObjects: Holiday[],\n): void {\n  const validRegions: Region[] = ['BW', 'BY', 'AUGSBURG', 'ST'];\n  if (validRegions.includes(region) || region === 'ALL') {\n    feiertageObjects.push(\n      newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6), validRegions),\n    );\n  }\n}\n\nfunction addEasterAndPfingsten(\n  year: number,\n  region: Region,\n  easterDate: Date,\n  pfingstsonntag: Date,\n  feiertageObjects: Holiday[],\n): void {\n  const validRegions: Region[] = ['BB'];\n  if (validRegions.includes(region) || region === 'ALL') {\n    feiertageObjects.push(\n      newHoliday('OSTERSONNTAG', easterDate, validRegions),\n      newHoliday('PFINGSTSONNTAG', pfingstsonntag, validRegions),\n    );\n  }\n}\n\nfunction addFronleichnam(\n  region: Region,\n  easterDate: Date,\n  holidays: Holiday[],\n): void {\n  const validRegions: Region[] = ['BW', 'BY', 'AUGSBURG', 'HE', 'NW', 'RP', 'SL'];\n  if (validRegions.includes(region) || region === 'ALL') {\n    const fronleichnam = addDays(new Date(easterDate.getTime()), 60);\n    holidays.push(newHoliday('FRONLEICHNAM', fronleichnam, validRegions));\n  }\n}\n\nfunction addMariaeHimmelfahrt(\n  year: number,\n  region: Region,\n  holidays: Holiday[],\n): void {\n  const validRegions: Region[] = ['SL', 'BY', 'AUGSBURG'];\n\n  if (validRegions.includes(region) || region === 'ALL') {\n    holidays.push(\n      newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15), validRegions),\n    );\n  }\n}\n\nfunction addReformationstag(\n  year: number,\n  region: Region,\n  holidays: Holiday[],\n): void {\n  const validRegions: Region[] = [\n    'NI',\n    'BB',\n    'MV',\n    'SN',\n    'ST',\n    'TH',\n    'HB',\n    'HH',\n    'SH',\n  ];\n  if (year === 2017 || validRegions.includes(region) || region === 'ALL') {\n    holidays.push(\n      newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31), validRegions),\n    );\n  }\n}\n\nfunction addAllerheiligen(\n  year: number,\n  region: Region,\n  holidays: Holiday[],\n): void {\n  const validRegions: Region[] = ['BW', 'BY', 'NW', 'RP', 'SL', 'AUGSBURG'];\n  if (validRegions.includes(region) || region === 'ALL') {\n    holidays.push(\n      newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1), validRegions),\n    );\n  }\n}\n\nfunction addBussUndBetttag(\n  year: number,\n  region: Region,\n  holidays: Holiday[],\n): void {\n  const validRegions: Region[] = ['SN'];\n  if (region === 'SN' || region === 'ALL') {\n    // @todo write test\n    const bussbettag = getBussBettag(year);\n    holidays.push(\n      newHoliday(\n        'BUBETAG',\n        makeDate(\n          bussbettag.getUTCFullYear(),\n          bussbettag.getUTCMonth() + 1,\n          bussbettag.getUTCDate(),\n        ),\n        validRegions,\n      ),\n    );\n  }\n}\n\nfunction addWeltkindertag(\n  year: number,\n  region: Region,\n  holidays: Holiday[],\n): void {\n  if (year >= 2019 && (region === 'TH' || region === 'ALL')) {\n    holidays.push(newHoliday('WELTKINDERTAG', makeDate(year, 9, 20), ['TH']));\n  }\n}\n\nfunction addWeltfrauenTag(\n  year: number,\n  region: Region,\n  feiertageObjects: Holiday[],\n): void {\n  if (year <= 2018) {\n    return;\n  }\n  if (region === 'BE' || region === 'ALL') {\n    // in Berlin ist der Weltfrauentag ein Feiertag seit 2018\n    feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8), ['MV', 'BE']));\n  }\n  if (region === 'MV' && year >= 2023) {\n    // in MV wird der Weltfrauentag erst ab 2023 eingeführt\n    feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8), ['MV', 'BE']));\n  }\n}\n\n/**\n * Calculates the Easter date of a given year.\n * @param year {number}\n * @returns {Date} Easter date\n * @private\n */\nfunction getEasterDate(year: number): Date {\n  const C = Math.floor(year / 100);\n  // tslint:disable:binary-expression-operand-order\n  // tslint generates false positives in the following blocks\n  const N = year - 19 * Math.floor(year / 19);\n  const K = Math.floor((C - 17) / 25);\n  let I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15;\n  I -= 30 * Math.floor(I / 30);\n  I -=\n    Math.floor(I / 28) *\n    (1 -\n      Math.floor(I / 28) *\n        Math.floor(29 / (I + 1)) *\n        Math.floor((21 - N) / 11));\n  let J = year + Math.floor(year / 4) + I + 2 - C + Math.floor(C / 4);\n  J -= 7 * Math.floor(J / 7);\n  const L = I - J;\n  const M = 3 + Math.floor((L + 40) / 44);\n  const D = L + 28 - 31 * Math.floor(M / 4);\n  // tslint:enable:binary-expression-operand-order\n  return new Date(year, M - 1, D);\n}\n\n/**\n * Computes the \"Buss- und Bettag\"'s date.\n * @param jahr {number}\n * @returns {Date} the year's \"Buss- und Bettag\" date\n * @private\n */\nfunction getBussBettag(jahr: number): Date {\n  const weihnachten = new Date(jahr, 11, 25, 12, 0, 0);\n  const ersterAdventOffset = 32;\n  let wochenTagOffset = weihnachten.getDay() % 7;\n\n  if (wochenTagOffset === 0) {\n    wochenTagOffset = 7;\n  }\n\n  const tageVorWeihnachten = wochenTagOffset + ersterAdventOffset;\n\n  let bbtag = new Date(weihnachten.getTime());\n  bbtag = addDays(bbtag, -tageVorWeihnachten);\n\n  return bbtag;\n}\n\n/**\n * Adds {@code days} days to the given {@link Date}.\n * @param date\n * @param days\n * @returns {Date}\n * @private\n */\nfunction addDays(date: Date, days: number): Date {\n  const changedDate = new Date(date);\n  changedDate.setDate(date.getDate() + days);\n  return changedDate;\n}\n\n/**\n * Creates a new {@link Date}.\n * @param year\n * @param naturalMonth month (1-12)\n * @param day\n * @returns {Date}\n * @private\n */\nfunction makeDate(year: number, naturalMonth: number, day: number): Date {\n  return new Date(year, naturalMonth - 1, day);\n}\n\n/**\n *\n * @param name\n * @param date\n * @returns {Holiday}\n * @private\n */\nfunction newHoliday(name: HolidayType, date: Date, regions: Region[]): Holiday {\n  if (regions.length === 1 && regions[0] === 'ALL') {\n    regions = allRegions;\n  }\n\n  return {\n    name,\n    date,\n    dateString: localeDateObjectToDateString(date),\n    regions,\n    trans(lang: string = currentLanguage): string | undefined {\n      throw new Error('Method deprecated. Please replace trans() with translate(). This method will be removed in the next major release.');\n    },\n    translate(lang: string = currentLanguage): string | undefined {\n      return lang === undefined || lang === null\n        ? undefined\n        : translations[lang][this.name];\n    },\n    getNormalizedDate(): number {\n      return toUtcTimestamp(this.date);\n    },\n    equals(otherDate: Date): boolean {\n      const dateString = localeDateObjectToDateString(otherDate);\n      return this.dateString === dateString;\n    },\n  };\n}\n\n/**\n *\n * @param date\n * @returns {string}\n * @private\n */\nfunction localeDateObjectToDateString(date: Date): string {\n  const normalizedDate = new Date(\n    date.getTime() - date.getTimezoneOffset() * 60 * 1000,\n  );\n  normalizedDate.setUTCHours(0, 0, 0, 0);\n  return normalizedDate.toISOString().slice(0, 10);\n}\n\n/**\n * Returns the UTC timestamp of the given date with hours, minutes, seconds, and milliseconds set to zero.\n * @param date\n * @returns {number} UTC timestamp\n */\nfunction toUtcTimestamp(date: Date): number {\n  const internalDate = new Date(date);\n  internalDate.setHours(0, 0, 0, 0);\n  return internalDate.getTime();\n}\n"],"names":[],"mappings":"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"}