From acf4b7d89ac80475146af1469ad3d261aca75d4a Mon Sep 17 00:00:00 2001 From: AliGitGut Date: Tue, 13 Jun 2023 14:28:19 +0200 Subject: [PATCH] Feiertage Implementiert Feiertage werden nun ausgegraut ^^ --- anwendung/src/components/CalenderView.jsx | 16 +- .../src/pages/semesteroverviewLecturer.js | 2 +- node_modules/.package-lock.json | 15 + node_modules/feiertagejs/LICENSE | 22 + node_modules/feiertagejs/Readme.md | 93 ++++ .../feiertagejs/build/feiertage.esm.js | 476 +++++++++++++++++ .../feiertagejs/build/feiertage.esm.js.map | 1 + node_modules/feiertagejs/build/feiertage.js | 476 +++++++++++++++++ .../feiertagejs/build/feiertage.js.map | 1 + .../feiertagejs/build/feiertage.umd.cjs | 496 ++++++++++++++++++ .../feiertagejs/build/feiertage.umd.cjs.map | 1 + .../feiertagejs/build/feiertage.umd.js | 496 ++++++++++++++++++ .../feiertagejs/build/feiertage.umd.js.map | 1 + node_modules/feiertagejs/docs.md | 144 +++++ node_modules/feiertagejs/index.d.ts | 113 ++++ node_modules/feiertagejs/package.json | 53 ++ package-lock.json | 20 + package.json | 5 + 18 files changed, 2426 insertions(+), 5 deletions(-) create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/feiertagejs/LICENSE create mode 100644 node_modules/feiertagejs/Readme.md create mode 100644 node_modules/feiertagejs/build/feiertage.esm.js create mode 100644 node_modules/feiertagejs/build/feiertage.esm.js.map create mode 100644 node_modules/feiertagejs/build/feiertage.js create mode 100644 node_modules/feiertagejs/build/feiertage.js.map create mode 100644 node_modules/feiertagejs/build/feiertage.umd.cjs create mode 100644 node_modules/feiertagejs/build/feiertage.umd.cjs.map create mode 100644 node_modules/feiertagejs/build/feiertage.umd.js create mode 100644 node_modules/feiertagejs/build/feiertage.umd.js.map create mode 100644 node_modules/feiertagejs/docs.md create mode 100644 node_modules/feiertagejs/index.d.ts create mode 100644 node_modules/feiertagejs/package.json create mode 100644 package-lock.json create mode 100644 package.json diff --git a/anwendung/src/components/CalenderView.jsx b/anwendung/src/components/CalenderView.jsx index 3589f08..20544a8 100644 --- a/anwendung/src/components/CalenderView.jsx +++ b/anwendung/src/components/CalenderView.jsx @@ -6,6 +6,7 @@ import WeekSelector from "@/components/WeekSelector"; import {baseURL} from "@/components/Constants"; import {ErrorType} from "@/components/ErrorType"; import BasicDateCalendar from "@/components/CalendarSideBar"; +import feiertagejs from "feiertagejs"; let cellHeight = 20; @@ -54,10 +55,6 @@ export default function CalenderView(p) { let maxLunchBreak = 0 let daySum = 0 for (let j = 0; j < en[i].length; j++) { - if (en[i][j] != null){ - console.log(currentsid + " " + en[i][j].semesterid) - - } if (en[i][j] != null && currentsid == (en[i][j]).semesterid) { let elem = en[i][j] @@ -143,6 +140,7 @@ export default function CalenderView(p) { } } } + } let j = 0; @@ -151,6 +149,10 @@ export default function CalenderView(p) { grayedOut[j] = i % Math.round(((new Date(currentYear, 11, 31) - new Date(currentYear, 0, 0)) / (1000 * 60 * 60 * 24))) < semesterStart && semesterEnd && new Date(currentYear, 0, currentWeekStartDay + j).getFullYear() == semesterStartYear || i % Math.round(((new Date(currentYear, 11, 31) - new Date(currentYear, 0, 0)) / (1000 * 60 * 60 * 24))) > semesterEnd && new Date(currentYear, 0, currentWeekStartDay + j).getFullYear() == semesterEndYear j++ } + for (let i = 0; i < 6; i++) { + let date = new Date(currentYear, 0, currentWeekStartDay+i) + grayedOut[i] = holiday(currentYear, date.getMonth(), date.getDate()) + } setEntries(en) }) @@ -187,6 +189,12 @@ export default function CalenderView(p) { }).then(r => readEntries()) } + function holiday(year, month, day){ + var feiertagejs = require('feiertagejs'); + let today = new Date(year, month, day) + return feiertagejs.isHoliday(today, 'BW') + } + function checkForElementAtRow(row, column) { let currentList = entries[column]; for (let i = 0; i < currentList.length; i++) { diff --git a/anwendung/src/pages/semesteroverviewLecturer.js b/anwendung/src/pages/semesteroverviewLecturer.js index 6225ee5..e372111 100644 --- a/anwendung/src/pages/semesteroverviewLecturer.js +++ b/anwendung/src/pages/semesteroverviewLecturer.js @@ -33,7 +33,7 @@ export default function SemesteroverviewLecturer(p) { fetch(semesterURL).then(r => r.json()).then(sem => { sem.map(e => { let progessURL = baseURL + "/entries/planned?sessionid=" + localStorage.getItem("sessionid") + "&semesterid=" + e.id; - fetch(progessURL).then(r => r.json()).then(en => console.log(en)) + fetch(progessURL).then(r => r.json()).then(en => console.log(en)) // TODO: Progressbar temp.push(e.name) }) }).then(() => setSemesterNames(temp)) diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..573a6cb --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,15 @@ +{ + "name": "TIF22A_AnwProjekt_B", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/feiertagejs": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/feiertagejs/-/feiertagejs-1.3.9.tgz", + "integrity": "sha512-tUP+WBv2OWBhPwe3NfqwCtjMq+ym598a42tfqmL0FySswEb9xs96p2iKwqqx+lxKieu1njJBRZKsFm92bJhxZw==", + "engines": { + "node": ">=8.0.0" + } + } + } +} diff --git a/node_modules/feiertagejs/LICENSE b/node_modules/feiertagejs/LICENSE new file mode 100644 index 0000000..bf08bd5 --- /dev/null +++ b/node_modules/feiertagejs/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Simon Fakir + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/feiertagejs/Readme.md b/node_modules/feiertagejs/Readme.md new file mode 100644 index 0000000..525b160 --- /dev/null +++ b/node_modules/feiertagejs/Readme.md @@ -0,0 +1,93 @@ +# Feiertage.js + +[![npm version](https://badge.fury.io/js/feiertagejs.svg)](https://badge.fury.io/js/feiertagejs) +[![Build Status](https://travis-ci.org/sfakir/feiertagejs.svg?branch=master)](https://travis-ci.org/sfakir/feiertagejs) + + +Feiertage.js is a small *typescript* npm module without dependencies to calculate German holidays for each Bundesland. + +## Installation + +- [yarn](https://yarnpkg.com/en/): `yarn add feiertagejs` +- [npm](https://www.npmjs.com/): `npm install feiertagejs` +- [bower](https://bower.io/): `bower install feiertagejs` *outdated!* +- [Plain Javascript](http://extern.fakir.it/feiertagejs/feiertagejs.zip) *outdated!* + +## Quick Examples + +### ES Modules (Typescript/Javasript) + +The prefered whay is to directly import the typescript module. However, you can also use .js. +Please find here some examples and full api [here](docs.md). + + +```javascript +import { getHolidays, isHoliday, isSpecificHoliday } from 'feiertagejs'; + +const today = new Date(); + +console.log(isHoliday(today, 'BW')); +// probably false, because you are working ;) + +// check if a day is a specific holiday: +console.log(isSpecificHoliday(today, 'CHRISTIHIMMELFAHRT','ALL')); + +// get all holiday for a single year: getHolidays() +// returns an array of "Holiday" Objects. Please see the docs.md for all properties. +const holidays2023 = getHolidays('2023','BUND'); + + +console.log('date', holidays2023[0].date); // = Date("2023-01-01"); +console.log('name', holidays2023[0].name); // 'NEUJAHRSTAG' (constant) +console.log('translation', holidays2023[0].trans('de')); // German translation: Neujahrstag +console.log('equals?', holidays2023[0].equals(date)); // Compare days only (ignore time) +``` + +### Usage in Node.js + +```javascript +var feiertagejs = require('feiertagejs'); + +var today = new Date(); + +console.log(feiertagejs.isHoliday(today, 'BW')); +// probably false, because you are working ;) + +// check if a day is a specific holiday: +console.log(feiertagejs.isSpecificHoliday(today, 'CHRISTIHIMMELFAHRT')); + +// get all holiday for a single year: getHolidays() +// returns an array of "Holiday" Objects. Please see the docs.md for all properties. + +var holidays2023 = feiertagejs.getHolidays('2023', 'BUND'); + +console.log('date', holidays2023[0].date); // = Date("2023-01-01"); +console.log('name', holidays2023[0].name); // 'NEUJAHRSTAG' (constant) +console.log('translation', holidays2023[0].translate()); // German translation: Neujahrstag +console.log('equals?', holidays2023[0].equals(date)); // Compare days only (ignore time) +``` + +## API doc + +The full API doc can be found [here](docs.md). + + +## Feedback and Questions + +You have two options two give feedback or ask questions: + +* Comment the official release [post](https://fakir.tech/de/feiertage-js-deutsche-feiertage-fuer-node-js-und-browser-javascript/) +* Open issues or pullrequests on [github](https://github.com/sfakir/feiertagejs) + + +## Contributors + +Thank you for contributing: + +* thetric +* SteveOswald + + +## Feedback + +If you have any questions, feel free to open an issue. diff --git a/node_modules/feiertagejs/build/feiertage.esm.js b/node_modules/feiertagejs/build/feiertage.esm.js new file mode 100644 index 0000000..035eeb5 --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.esm.js @@ -0,0 +1,476 @@ +const germanTranslations = { + NEUJAHRSTAG: 'Neujahrstag', + HEILIGEDREIKOENIGE: 'Heilige Drei Könige', + KARFREITAG: 'Karfreitag', + OSTERSONNTAG: 'Ostersonntag', + OSTERMONTAG: 'Ostermontag', + TAG_DER_ARBEIT: 'Tag der Arbeit', + CHRISTIHIMMELFAHRT: 'Christi Himmelfahrt', + PFINGSTSONNTAG: 'Pfingstsonntag', + PFINGSTMONTAG: 'Pfingstmontag', + FRONLEICHNAM: 'Fronleichnam', + MARIAHIMMELFAHRT: 'Mariä Himmelfahrt', + DEUTSCHEEINHEIT: 'Tag der Deutschen Einheit', + REFORMATIONSTAG: 'Reformationstag', + ALLERHEILIGEN: 'Allerheiligen', + BUBETAG: 'Buß- und Bettag', + ERSTERWEIHNACHTSFEIERTAG: '1. Weihnachtstag', + ZWEITERWEIHNACHTSFEIERTAG: '2. Weihnachtstag', + WELTKINDERTAG: 'Weltkindertag', + WELTFRAUENTAG: 'Weltfrauentag', + AUGSBURGER_FRIEDENSFEST: 'Augsburger Friedensfest', +}; + +const allHolidays = [ + 'NEUJAHRSTAG', + 'HEILIGEDREIKOENIGE', + 'KARFREITAG', + 'OSTERSONNTAG', + 'OSTERMONTAG', + 'TAG_DER_ARBEIT', + 'CHRISTIHIMMELFAHRT', + 'MARIAHIMMELFAHRT', + 'PFINGSTSONNTAG', + 'PFINGSTMONTAG', + 'FRONLEICHNAM', + 'DEUTSCHEEINHEIT', + 'REFORMATIONSTAG', + 'ALLERHEILIGEN', + 'BUBETAG', + 'ERSTERWEIHNACHTSFEIERTAG', + 'ZWEITERWEIHNACHTSFEIERTAG', + 'WELTKINDERTAG', + 'WELTFRAUENTAG', + 'AUGSBURGER_FRIEDENSFEST', +]; + +const allRegions = [ + 'BW', + 'BY', + 'BE', + 'BB', + 'HB', + 'HE', + 'HH', + 'MV', + 'NI', + 'NW', + 'RP', + 'SL', + 'SN', + 'ST', + 'SH', + 'TH', + 'BUND', + 'AUGSBURG', + 'ALL', +]; + +/*! + * feiertage.js + * @repository https://github.com/sfakir/feiertagejs + * @docs https://github.com/sfakir/feiertagejs/blob/master/docs.md + * + * Copyright 2015-2021 Simon Fakir + * Released under the MIT license + */ +// translations +const defaultLanguage = 'de'; +let currentLanguage = defaultLanguage; +const translations = { + de: germanTranslations, +}; +/** + * adds a translation for the holidays (e.g. english). + * This also allows to override the German names. + * Hint: Interpolates German for missing translations + * @param {string} isoCode of the new language + * @param {TranslationTable} newTranslation map of {HolidayType} to translation stringg + */ +function addTranslation(isoCode, newTranslation) { + const code = isoCode.toLowerCase(); + const defaultTranslation = translations[defaultLanguage]; + let missingFields = false; + // fill new Translation with default Language + for (const holiday of allHolidays) { + if (!newTranslation[holiday]) { + missingFields = true; + newTranslation[holiday] = defaultTranslation[holiday]; + } + } + if (missingFields) { + console.warn('[feiertagejs] addTranslation: you did not add all holidays in your translation! Took German as fallback'); + } + translations[code] = newTranslation; +} +/** + * Set a language to default language + * @param {string} isoCode + */ +function setLanguage(isoCode) { + const code = isoCode.toLowerCase(); + if (!translations[code]) { + throw new TypeError(`[feiertagejs] tried to set language to ${code} but the translation is missing. Please use addTranslation(isoCode,object) first`); + } + currentLanguage = isoCode; +} +/** + * Get currently set language + * @returns {string} + */ +function getLanguage() { + return currentLanguage; +} +// holidays api +/** + * Checks if a specific date is sunday or holiday. + * @param date + * @param region + * @returns {boolean} + */ +function isSunOrHoliday(date, region) { + checkRegion(region); + return date.getDay() === 0 || isHoliday(date, region); +} +/** + * Check is specific date is holiday. + * @param date + * @param {Region} region two character {@link Region} code + * @returns {boolean} + */ +function isHoliday(date, region) { + checkRegion(region); + const year = date.getFullYear(); + const internalDate = toUtcTimestamp(date); + const holidays = getHolidaysAsUtcTimestamps(year, region); + return holidays.indexOf(internalDate) !== -1; +} +function getHolidayByDate(date, region = 'ALL') { + checkRegion(region); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + return holidays.find((holiday) => holiday.equals(date)); +} +// additional runtime checks +/** + * Checks if the given region is a valid {@link Region}. + * + * @param region {@link Region} to check + * @throws {Error} + * @private + */ +function checkRegion(region) { + if (region === null || region === undefined) { + throw new Error(`Region must not be undefined or null`); + } + if (allRegions.indexOf(region) === -1) { + throw new Error(`Invalid region: ${region}! Must be one of ${allRegions.toString()}`); + } +} +/** + * Checks if the given holidayName is a valid {@link HolidayType}. + * @param holidayName {@link HolidayType} to check + * @throws {Error} + * @private + */ +function checkHolidayType(holidayName) { + if (holidayName === null || holidayName === undefined) { + throw new TypeError('holidayName must not be null or undefined'); + } + if (allHolidays.indexOf(holidayName) === -1) { + throw new Error(`feiertage.js: invalid holiday type "${holidayName}"! Must be one of ${allHolidays.toString()}`); + } +} +function isSpecificHoliday(date, holidayName, region = 'ALL') { + checkRegion(region); + checkHolidayType(holidayName); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + const foundHoliday = holidays.find((holiday) => holiday.equals(date)); + if (!foundHoliday) { + return false; + } + return foundHoliday.name === holidayName; +} +/** + * Returns all holidays of a year in a {@link Region}. + * @param year + * @param region + * @returns {Array.} + */ +function getHolidays(year, region) { + let y; + if (typeof year === 'string') { + y = parseInt(year, 10); + } + else { + y = year; + } + checkRegion(region); + return getHolidaysOfYear(y, region); +} +/** + * + * @param {number} year + * @param region + * @returns {number[]} + * @private + */ +function getHolidaysAsUtcTimestamps(year, region) { + const holidays = getHolidaysOfYear(year, region); + return holidays.map((holiday) => toUtcTimestamp(holiday.date)); +} +/** + * + * @param {number} year + * @param region + * @returns {{objects: Array., integers}} + * @private + */ +function getHolidaysOfYear(year, region) { + const easterDate = getEasterDate(year); + const karfreitag = addDays(new Date(easterDate.getTime()), -2); + const ostermontag = addDays(new Date(easterDate.getTime()), 1); + const christiHimmelfahrt = addDays(new Date(easterDate.getTime()), 39); + const pfingstsonntag = addDays(new Date(easterDate.getTime()), 49); + const pfingstmontag = addDays(new Date(easterDate.getTime()), 50); + const holidays = [ + ...getCommonHolidays(year), + newHoliday('KARFREITAG', karfreitag), + newHoliday('OSTERMONTAG', ostermontag), + newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt), + newHoliday('PFINGSTMONTAG', pfingstmontag), + ]; + addHeiligeDreiKoenige(year, region, holidays); + addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, holidays); + addFronleichnam(region, easterDate, holidays); + addMariaeHimmelfahrt(year, region, holidays); + addReformationstag(year, region, holidays); + addAllerheiligen(year, region, holidays); + addBussUndBetttag(year, region, holidays); + addWeltkindertag(year, region, holidays); + addWeltfrauenTag(year, region, holidays); + addRegionalHolidays(year, region, holidays); + return holidays.sort((a, b) => a.date.getTime() - b.date.getTime()); +} +function getCommonHolidays(year) { + return [ + newHoliday('NEUJAHRSTAG', makeDate(year, 1, 1)), + newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)), + newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)), + newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)), + newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)), + ]; +} +function addRegionalHolidays(year, region, feiertageObjects) { + if (region === 'AUGSBURG') { + feiertageObjects.push(newHoliday('AUGSBURGER_FRIEDENSFEST', makeDate(year, 8, 8))); + } +} +function addHeiligeDreiKoenige(year, region, feiertageObjects) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ST' || + region === 'ALL') { + feiertageObjects.push(newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6))); + } +} +function addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, feiertageObjects) { + if (region === 'BB' || region === 'ALL') { + feiertageObjects.push(newHoliday('OSTERSONNTAG', easterDate), newHoliday('PFINGSTSONNTAG', pfingstsonntag)); + } +} +function addFronleichnam(region, easterDate, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'HE' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + const fronleichnam = addDays(new Date(easterDate.getTime()), 60); + holidays.push(newHoliday('FRONLEICHNAM', fronleichnam)); + } +} +function addMariaeHimmelfahrt(year, region, holidays) { + if (region === 'SL' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ALL') { + holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15))); + } +} +function addReformationstag(year, region, holidays) { + if (year === 2017 || + region === 'NI' || + region === 'BB' || + region === 'HB' || + region === 'HH' || + region === 'MV' || + region === 'SN' || + region === 'ST' || + region === 'TH' || + region === 'SH' || + region === 'ALL') { + holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31))); + } +} +function addAllerheiligen(year, region, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1))); + } +} +function addBussUndBetttag(year, region, holidays) { + if (region === 'SN' || region === 'ALL') { + // @todo write test + const bussbettag = getBussBettag(year); + holidays.push(newHoliday('BUBETAG', makeDate(bussbettag.getUTCFullYear(), bussbettag.getUTCMonth() + 1, bussbettag.getUTCDate()))); + } +} +function addWeltkindertag(year, region, holidays) { + if (year >= 2019 && (region === 'TH' || region === 'ALL')) { + holidays.push(newHoliday('WELTKINDERTAG', makeDate(year, 9, 20))); + } +} +function addWeltfrauenTag(year, region, feiertageObjects) { + if (year <= 2018) { + return; + } + if (region === 'BE' || region === 'ALL') { + // in Berlin ist der Weltfrauentag ein Feiertag seit 2018 + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } + if (region === 'MV' && year >= 2023) { + // in MV wird der Weltfrauentag erst ab 2023 eingeführt + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } +} +/** + * Calculates the Easter date of a given year. + * @param year {number} + * @returns {Date} Easter date + * @private + */ +function getEasterDate(year) { + const C = Math.floor(year / 100); + // tslint:disable:binary-expression-operand-order + // tslint generates false positives in the following blocks + const N = year - 19 * Math.floor(year / 19); + const K = Math.floor((C - 17) / 25); + let I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15; + I -= 30 * Math.floor(I / 30); + I -= + Math.floor(I / 28) * + (1 - + Math.floor(I / 28) * + Math.floor(29 / (I + 1)) * + Math.floor((21 - N) / 11)); + let J = year + Math.floor(year / 4) + I + 2 - C + Math.floor(C / 4); + J -= 7 * Math.floor(J / 7); + const L = I - J; + const M = 3 + Math.floor((L + 40) / 44); + const D = L + 28 - 31 * Math.floor(M / 4); + // tslint:enable:binary-expression-operand-order + return new Date(year, M - 1, D); +} +/** + * Computes the "Buss- und Bettag"'s date. + * @param jahr {number} + * @returns {Date} the year's "Buss- und Bettag" date + * @private + */ +function getBussBettag(jahr) { + const weihnachten = new Date(jahr, 11, 25, 12, 0, 0); + const ersterAdventOffset = 32; + let wochenTagOffset = weihnachten.getDay() % 7; + if (wochenTagOffset === 0) { + wochenTagOffset = 7; + } + const tageVorWeihnachten = wochenTagOffset + ersterAdventOffset; + let bbtag = new Date(weihnachten.getTime()); + bbtag = addDays(bbtag, -tageVorWeihnachten); + return bbtag; +} +/** + * Adds {@code days} days to the given {@link Date}. + * @param date + * @param days + * @returns {Date} + * @private + */ +function addDays(date, days) { + const changedDate = new Date(date); + changedDate.setDate(date.getDate() + days); + return changedDate; +} +/** + * Creates a new {@link Date}. + * @param year + * @param naturalMonth month (1-12) + * @param day + * @returns {Date} + * @private + */ +function makeDate(year, naturalMonth, day) { + return new Date(year, naturalMonth - 1, day); +} +/** + * + * @param name + * @param date + * @returns {Holiday} + * @private + */ +function newHoliday(name, date) { + return { + name, + date, + dateString: localeDateObjectToDateString(date), + trans(lang = currentLanguage) { + console.warn('FeiertageJs: You are using "Holiday.trans() method. This will be replaced in the next major version with translate()"'); + return this.translate(lang); + }, + translate(lang = currentLanguage) { + return lang === undefined || lang === null + ? undefined + : translations[lang][this.name]; + }, + getNormalizedDate() { + return toUtcTimestamp(this.date); + }, + equals(otherDate) { + const dateString = localeDateObjectToDateString(otherDate); + return this.dateString === dateString; + }, + }; +} +/** + * + * @param date + * @returns {string} + * @private + */ +function localeDateObjectToDateString(date) { + const normalizedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000); + normalizedDate.setUTCHours(0, 0, 0, 0); + return normalizedDate.toISOString().slice(0, 10); +} +/** + * Returns the UTC timestamp of the given date with hours, minutes, seconds, and milliseconds set to zero. + * @param date + * @returns {number} UTC timestamp + */ +function toUtcTimestamp(date) { + const internalDate = new Date(date); + internalDate.setHours(0, 0, 0, 0); + return internalDate.getTime(); +} + +export { addTranslation, getHolidayByDate, getHolidays, getLanguage, isHoliday, isSpecificHoliday, isSunOrHoliday, setLanguage }; +//# sourceMappingURL=feiertage.esm.js.map diff --git a/node_modules/feiertagejs/build/feiertage.esm.js.map b/node_modules/feiertagejs/build/feiertage.esm.js.map new file mode 100644 index 0000000..98abf2b --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"feiertage.esm.js","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 (incompelte) !\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.}\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., 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),\n newHoliday('OSTERMONTAG', ostermontag),\n newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt),\n newHoliday('PFINGSTMONTAG', pfingstmontag),\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)),\n newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)),\n newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)),\n newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)),\n newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)),\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)),\n );\n }\n}\nfunction addHeiligeDreiKoenige(\n year: number,\n region: Region,\n feiertageObjects: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ST' ||\n region === 'ALL'\n ) {\n feiertageObjects.push(\n newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6)),\n );\n }\n}\n\nfunction addEasterAndPfingsten(\n year: number,\n region: Region,\n easterDate: Date,\n pfingstsonntag: Date,\n feiertageObjects: Holiday[],\n): void {\n if (region === 'BB' || region === 'ALL') {\n feiertageObjects.push(\n newHoliday('OSTERSONNTAG', easterDate),\n newHoliday('PFINGSTSONNTAG', pfingstsonntag),\n );\n }\n}\n\nfunction addFronleichnam(\n region: Region,\n easterDate: Date,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'HE' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n const fronleichnam = addDays(new Date(easterDate.getTime()), 60);\n holidays.push(newHoliday('FRONLEICHNAM', fronleichnam));\n }\n}\n\nfunction addMariaeHimmelfahrt(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'SL' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15)));\n }\n}\n\nfunction addReformationstag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n year === 2017 ||\n region === 'NI' ||\n region === 'BB' ||\n region === 'HB' ||\n region === 'HH' ||\n region === 'MV' ||\n region === 'SN' ||\n region === 'ST' ||\n region === 'TH' ||\n region === 'SH' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31)));\n }\n}\n\nfunction addAllerheiligen(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1)));\n }\n}\n\nfunction addBussUndBetttag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\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 ),\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)));\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)));\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)));\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): Holiday {\n return {\n name,\n date,\n dateString: localeDateObjectToDateString(date),\n trans(lang: string = currentLanguage): string | undefined {\n console.warn(\n 'FeiertageJs: You are using \"Holiday.trans() method. This will be replaced in the next major version with translate()\"',\n );\n return this.translate(lang);\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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"} \ No newline at end of file diff --git a/node_modules/feiertagejs/build/feiertage.js b/node_modules/feiertagejs/build/feiertage.js new file mode 100644 index 0000000..107949d --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.js @@ -0,0 +1,476 @@ +const germanTranslations = { + NEUJAHRSTAG: 'Neujahrstag', + HEILIGEDREIKOENIGE: 'Heilige Drei Könige', + KARFREITAG: 'Karfreitag', + OSTERSONNTAG: 'Ostersonntag', + OSTERMONTAG: 'Ostermontag', + TAG_DER_ARBEIT: 'Tag der Arbeit', + CHRISTIHIMMELFAHRT: 'Christi Himmelfahrt', + PFINGSTSONNTAG: 'Pfingstsonntag', + PFINGSTMONTAG: 'Pfingstmontag', + FRONLEICHNAM: 'Fronleichnam', + MARIAHIMMELFAHRT: 'Mariä Himmelfahrt', + DEUTSCHEEINHEIT: 'Tag der Deutschen Einheit', + REFORMATIONSTAG: 'Reformationstag', + ALLERHEILIGEN: 'Allerheiligen', + BUBETAG: 'Buß- und Bettag', + ERSTERWEIHNACHTSFEIERTAG: '1. Weihnachtstag', + ZWEITERWEIHNACHTSFEIERTAG: '2. Weihnachtstag', + WELTKINDERTAG: 'Weltkindertag', + WELTFRAUENTAG: 'Weltfrauentag', + AUGSBURGER_FRIEDENSFEST: 'Augsburger Friedensfest', +}; + +const allHolidays = [ + 'NEUJAHRSTAG', + 'HEILIGEDREIKOENIGE', + 'KARFREITAG', + 'OSTERSONNTAG', + 'OSTERMONTAG', + 'TAG_DER_ARBEIT', + 'CHRISTIHIMMELFAHRT', + 'MARIAHIMMELFAHRT', + 'PFINGSTSONNTAG', + 'PFINGSTMONTAG', + 'FRONLEICHNAM', + 'DEUTSCHEEINHEIT', + 'REFORMATIONSTAG', + 'ALLERHEILIGEN', + 'BUBETAG', + 'ERSTERWEIHNACHTSFEIERTAG', + 'ZWEITERWEIHNACHTSFEIERTAG', + 'WELTKINDERTAG', + 'WELTFRAUENTAG', + 'AUGSBURGER_FRIEDENSFEST', +]; + +const allRegions = [ + 'BW', + 'BY', + 'BE', + 'BB', + 'HB', + 'HE', + 'HH', + 'MV', + 'NI', + 'NW', + 'RP', + 'SL', + 'SN', + 'ST', + 'SH', + 'TH', + 'BUND', + 'AUGSBURG', + 'ALL', +]; + +/*! + * feiertage.js + * @repository https://github.com/sfakir/feiertagejs + * @docs https://github.com/sfakir/feiertagejs/blob/master/docs.md + * + * Copyright 2015-2021 Simon Fakir + * Released under the MIT license + */ +// translations +const defaultLanguage = 'de'; +let currentLanguage = defaultLanguage; +const translations = { + de: germanTranslations, +}; +/** + * adds a translation for the holidays (e.g. english). + * This also allows to override the German names. + * Hint: Interpolates German for missing translations + * @param {string} isoCode of the new language + * @param {TranslationTable} newTranslation map of {HolidayType} to translation stringg + */ +function addTranslation(isoCode, newTranslation) { + const code = isoCode.toLowerCase(); + const defaultTranslation = translations[defaultLanguage]; + let missingFields = false; + // fill new Translation with default Language + for (const holiday of allHolidays) { + if (!newTranslation[holiday]) { + missingFields = true; + newTranslation[holiday] = defaultTranslation[holiday]; + } + } + if (missingFields) { + console.warn('[feiertagejs] addTranslation: you did not add all holidays in your translation! Took German as fallback'); + } + translations[code] = newTranslation; +} +/** + * Set a language to default language + * @param {string} isoCode + */ +function setLanguage(isoCode) { + const code = isoCode.toLowerCase(); + if (!translations[code]) { + throw new TypeError(`[feiertagejs] tried to set language to ${code} but the translation is missing. Please use addTranslation(isoCode,object) first`); + } + currentLanguage = isoCode; +} +/** + * Get currently set language + * @returns {string} + */ +function getLanguage() { + return currentLanguage; +} +// holidays api +/** + * Checks if a specific date is sunday or holiday. + * @param date + * @param region + * @returns {boolean} + */ +function isSunOrHoliday(date, region) { + checkRegion(region); + return date.getDay() === 0 || isHoliday(date, region); +} +/** + * Check is specific date is holiday. + * @param date + * @param {Region} region two character {@link Region} code + * @returns {boolean} + */ +function isHoliday(date, region) { + checkRegion(region); + const year = date.getFullYear(); + const internalDate = toUtcTimestamp(date); + const holidays = getHolidaysAsUtcTimestamps(year, region); + return holidays.indexOf(internalDate) !== -1; +} +function getHolidayByDate(date, region = 'ALL') { + checkRegion(region); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + return holidays.find((holiday) => holiday.equals(date)); +} +// additional runtime checks +/** + * Checks if the given region is a valid {@link Region}. + * + * @param region {@link Region} to check + * @throws {Error} + * @private + */ +function checkRegion(region) { + if (region === null || region === undefined) { + throw new Error(`Region must not be undefined or null`); + } + if (allRegions.indexOf(region) === -1) { + throw new Error(`Invalid region: ${region}! Must be one of ${allRegions.toString()}`); + } +} +/** + * Checks if the given holidayName is a valid {@link HolidayType}. + * @param holidayName {@link HolidayType} to check + * @throws {Error} + * @private + */ +function checkHolidayType(holidayName) { + if (holidayName === null || holidayName === undefined) { + throw new TypeError('holidayName must not be null or undefined'); + } + if (allHolidays.indexOf(holidayName) === -1) { + throw new Error(`feiertage.js: invalid holiday type "${holidayName}"! Must be one of ${allHolidays.toString()}`); + } +} +function isSpecificHoliday(date, holidayName, region = 'ALL') { + checkRegion(region); + checkHolidayType(holidayName); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + const foundHoliday = holidays.find((holiday) => holiday.equals(date)); + if (!foundHoliday) { + return false; + } + return foundHoliday.name === holidayName; +} +/** + * Returns all holidays of a year in a {@link Region}. + * @param year + * @param region + * @returns {Array.} + */ +function getHolidays(year, region) { + let y; + if (typeof year === 'string') { + y = parseInt(year, 10); + } + else { + y = year; + } + checkRegion(region); + return getHolidaysOfYear(y, region); +} +/** + * + * @param {number} year + * @param region + * @returns {number[]} + * @private + */ +function getHolidaysAsUtcTimestamps(year, region) { + const holidays = getHolidaysOfYear(year, region); + return holidays.map((holiday) => toUtcTimestamp(holiday.date)); +} +/** + * + * @param {number} year + * @param region + * @returns {{objects: Array., integers}} + * @private + */ +function getHolidaysOfYear(year, region) { + const easterDate = getEasterDate(year); + const karfreitag = addDays(new Date(easterDate.getTime()), -2); + const ostermontag = addDays(new Date(easterDate.getTime()), 1); + const christiHimmelfahrt = addDays(new Date(easterDate.getTime()), 39); + const pfingstsonntag = addDays(new Date(easterDate.getTime()), 49); + const pfingstmontag = addDays(new Date(easterDate.getTime()), 50); + const holidays = [ + ...getCommonHolidays(year), + newHoliday('KARFREITAG', karfreitag), + newHoliday('OSTERMONTAG', ostermontag), + newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt), + newHoliday('PFINGSTMONTAG', pfingstmontag), + ]; + addHeiligeDreiKoenige(year, region, holidays); + addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, holidays); + addFronleichnam(region, easterDate, holidays); + addMariaeHimmelfahrt(year, region, holidays); + addReformationstag(year, region, holidays); + addAllerheiligen(year, region, holidays); + addBussUndBetttag(year, region, holidays); + addWeltkindertag(year, region, holidays); + addWeltfrauenTag(year, region, holidays); + addRegionalHolidays(year, region, holidays); + return holidays.sort((a, b) => a.date.getTime() - b.date.getTime()); +} +function getCommonHolidays(year) { + return [ + newHoliday('NEUJAHRSTAG', makeDate(year, 1, 1)), + newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)), + newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)), + newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)), + newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)), + ]; +} +function addRegionalHolidays(year, region, feiertageObjects) { + if (region === 'AUGSBURG') { + feiertageObjects.push(newHoliday('AUGSBURGER_FRIEDENSFEST', makeDate(year, 8, 8))); + } +} +function addHeiligeDreiKoenige(year, region, feiertageObjects) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ST' || + region === 'ALL') { + feiertageObjects.push(newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6))); + } +} +function addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, feiertageObjects) { + if (region === 'BB' || region === 'ALL') { + feiertageObjects.push(newHoliday('OSTERSONNTAG', easterDate), newHoliday('PFINGSTSONNTAG', pfingstsonntag)); + } +} +function addFronleichnam(region, easterDate, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'HE' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + const fronleichnam = addDays(new Date(easterDate.getTime()), 60); + holidays.push(newHoliday('FRONLEICHNAM', fronleichnam)); + } +} +function addMariaeHimmelfahrt(year, region, holidays) { + if (region === 'SL' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ALL') { + holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15))); + } +} +function addReformationstag(year, region, holidays) { + if (year === 2017 || + region === 'NI' || + region === 'BB' || + region === 'HB' || + region === 'HH' || + region === 'MV' || + region === 'SN' || + region === 'ST' || + region === 'TH' || + region === 'SH' || + region === 'ALL') { + holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31))); + } +} +function addAllerheiligen(year, region, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1))); + } +} +function addBussUndBetttag(year, region, holidays) { + if (region === 'SN' || region === 'ALL') { + // @todo write test + const bussbettag = getBussBettag(year); + holidays.push(newHoliday('BUBETAG', makeDate(bussbettag.getUTCFullYear(), bussbettag.getUTCMonth() + 1, bussbettag.getUTCDate()))); + } +} +function addWeltkindertag(year, region, holidays) { + if (year >= 2019 && (region === 'TH' || region === 'ALL')) { + holidays.push(newHoliday('WELTKINDERTAG', makeDate(year, 9, 20))); + } +} +function addWeltfrauenTag(year, region, feiertageObjects) { + if (year <= 2018) { + return; + } + if (region === 'BE' || region === 'ALL') { + // in Berlin ist der Weltfrauentag ein Feiertag seit 2018 + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } + if (region === 'MV' && year >= 2023) { + // in MV wird der Weltfrauentag erst ab 2023 eingeführt + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } +} +/** + * Calculates the Easter date of a given year. + * @param year {number} + * @returns {Date} Easter date + * @private + */ +function getEasterDate(year) { + const C = Math.floor(year / 100); + // tslint:disable:binary-expression-operand-order + // tslint generates false positives in the following blocks + const N = year - 19 * Math.floor(year / 19); + const K = Math.floor((C - 17) / 25); + let I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15; + I -= 30 * Math.floor(I / 30); + I -= + Math.floor(I / 28) * + (1 - + Math.floor(I / 28) * + Math.floor(29 / (I + 1)) * + Math.floor((21 - N) / 11)); + let J = year + Math.floor(year / 4) + I + 2 - C + Math.floor(C / 4); + J -= 7 * Math.floor(J / 7); + const L = I - J; + const M = 3 + Math.floor((L + 40) / 44); + const D = L + 28 - 31 * Math.floor(M / 4); + // tslint:enable:binary-expression-operand-order + return new Date(year, M - 1, D); +} +/** + * Computes the "Buss- und Bettag"'s date. + * @param jahr {number} + * @returns {Date} the year's "Buss- und Bettag" date + * @private + */ +function getBussBettag(jahr) { + const weihnachten = new Date(jahr, 11, 25, 12, 0, 0); + const ersterAdventOffset = 32; + let wochenTagOffset = weihnachten.getDay() % 7; + if (wochenTagOffset === 0) { + wochenTagOffset = 7; + } + const tageVorWeihnachten = wochenTagOffset + ersterAdventOffset; + let bbtag = new Date(weihnachten.getTime()); + bbtag = addDays(bbtag, -tageVorWeihnachten); + return bbtag; +} +/** + * Adds {@code days} days to the given {@link Date}. + * @param date + * @param days + * @returns {Date} + * @private + */ +function addDays(date, days) { + const changedDate = new Date(date); + changedDate.setDate(date.getDate() + days); + return changedDate; +} +/** + * Creates a new {@link Date}. + * @param year + * @param naturalMonth month (1-12) + * @param day + * @returns {Date} + * @private + */ +function makeDate(year, naturalMonth, day) { + return new Date(year, naturalMonth - 1, day); +} +/** + * + * @param name + * @param date + * @returns {Holiday} + * @private + */ +function newHoliday(name, date) { + return { + name, + date, + dateString: localeDateObjectToDateString(date), + trans(lang = currentLanguage) { + console.warn('FeiertageJs: You are using "Holiday.trans() method. This will be replaced in the next major version with translate()"'); + return this.translate(lang); + }, + translate(lang = currentLanguage) { + return lang === undefined || lang === null + ? undefined + : translations[lang][this.name]; + }, + getNormalizedDate() { + return toUtcTimestamp(this.date); + }, + equals(otherDate) { + const dateString = localeDateObjectToDateString(otherDate); + return this.dateString === dateString; + }, + }; +} +/** + * + * @param date + * @returns {string} + * @private + */ +function localeDateObjectToDateString(date) { + const normalizedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000); + normalizedDate.setUTCHours(0, 0, 0, 0); + return normalizedDate.toISOString().slice(0, 10); +} +/** + * Returns the UTC timestamp of the given date with hours, minutes, seconds, and milliseconds set to zero. + * @param date + * @returns {number} UTC timestamp + */ +function toUtcTimestamp(date) { + const internalDate = new Date(date); + internalDate.setHours(0, 0, 0, 0); + return internalDate.getTime(); +} + +export { addTranslation, getHolidayByDate, getHolidays, getLanguage, isHoliday, isSpecificHoliday, isSunOrHoliday, setLanguage }; +//# sourceMappingURL=feiertage.js.map diff --git a/node_modules/feiertagejs/build/feiertage.js.map b/node_modules/feiertagejs/build/feiertage.js.map new file mode 100644 index 0000000..dae998b --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"feiertage.js","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 (incompelte) !\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.}\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., 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),\n newHoliday('OSTERMONTAG', ostermontag),\n newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt),\n newHoliday('PFINGSTMONTAG', pfingstmontag),\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)),\n newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)),\n newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)),\n newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)),\n newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)),\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)),\n );\n }\n}\nfunction addHeiligeDreiKoenige(\n year: number,\n region: Region,\n feiertageObjects: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ST' ||\n region === 'ALL'\n ) {\n feiertageObjects.push(\n newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6)),\n );\n }\n}\n\nfunction addEasterAndPfingsten(\n year: number,\n region: Region,\n easterDate: Date,\n pfingstsonntag: Date,\n feiertageObjects: Holiday[],\n): void {\n if (region === 'BB' || region === 'ALL') {\n feiertageObjects.push(\n newHoliday('OSTERSONNTAG', easterDate),\n newHoliday('PFINGSTSONNTAG', pfingstsonntag),\n );\n }\n}\n\nfunction addFronleichnam(\n region: Region,\n easterDate: Date,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'HE' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n const fronleichnam = addDays(new Date(easterDate.getTime()), 60);\n holidays.push(newHoliday('FRONLEICHNAM', fronleichnam));\n }\n}\n\nfunction addMariaeHimmelfahrt(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'SL' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15)));\n }\n}\n\nfunction addReformationstag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n year === 2017 ||\n region === 'NI' ||\n region === 'BB' ||\n region === 'HB' ||\n region === 'HH' ||\n region === 'MV' ||\n region === 'SN' ||\n region === 'ST' ||\n region === 'TH' ||\n region === 'SH' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31)));\n }\n}\n\nfunction addAllerheiligen(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1)));\n }\n}\n\nfunction addBussUndBetttag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\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 ),\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)));\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)));\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)));\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): Holiday {\n return {\n name,\n date,\n dateString: localeDateObjectToDateString(date),\n trans(lang: string = currentLanguage): string | undefined {\n console.warn(\n 'FeiertageJs: You are using \"Holiday.trans() method. This will be replaced in the next major version with translate()\"',\n );\n return this.translate(lang);\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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"} \ No newline at end of file diff --git a/node_modules/feiertagejs/build/feiertage.umd.cjs b/node_modules/feiertagejs/build/feiertage.umd.cjs new file mode 100644 index 0000000..a5b23b2 --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.umd.cjs @@ -0,0 +1,496 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () { + var current = global.feiertagejs; + var exports = global.feiertagejs = {}; + factory(exports); + exports.noConflict = function () { global.feiertagejs = current; return exports; }; + })()); +})(this, (function (exports) { 'use strict'; + + const germanTranslations = { + NEUJAHRSTAG: 'Neujahrstag', + HEILIGEDREIKOENIGE: 'Heilige Drei Könige', + KARFREITAG: 'Karfreitag', + OSTERSONNTAG: 'Ostersonntag', + OSTERMONTAG: 'Ostermontag', + TAG_DER_ARBEIT: 'Tag der Arbeit', + CHRISTIHIMMELFAHRT: 'Christi Himmelfahrt', + PFINGSTSONNTAG: 'Pfingstsonntag', + PFINGSTMONTAG: 'Pfingstmontag', + FRONLEICHNAM: 'Fronleichnam', + MARIAHIMMELFAHRT: 'Mariä Himmelfahrt', + DEUTSCHEEINHEIT: 'Tag der Deutschen Einheit', + REFORMATIONSTAG: 'Reformationstag', + ALLERHEILIGEN: 'Allerheiligen', + BUBETAG: 'Buß- und Bettag', + ERSTERWEIHNACHTSFEIERTAG: '1. Weihnachtstag', + ZWEITERWEIHNACHTSFEIERTAG: '2. Weihnachtstag', + WELTKINDERTAG: 'Weltkindertag', + WELTFRAUENTAG: 'Weltfrauentag', + AUGSBURGER_FRIEDENSFEST: 'Augsburger Friedensfest', + }; + + const allHolidays = [ + 'NEUJAHRSTAG', + 'HEILIGEDREIKOENIGE', + 'KARFREITAG', + 'OSTERSONNTAG', + 'OSTERMONTAG', + 'TAG_DER_ARBEIT', + 'CHRISTIHIMMELFAHRT', + 'MARIAHIMMELFAHRT', + 'PFINGSTSONNTAG', + 'PFINGSTMONTAG', + 'FRONLEICHNAM', + 'DEUTSCHEEINHEIT', + 'REFORMATIONSTAG', + 'ALLERHEILIGEN', + 'BUBETAG', + 'ERSTERWEIHNACHTSFEIERTAG', + 'ZWEITERWEIHNACHTSFEIERTAG', + 'WELTKINDERTAG', + 'WELTFRAUENTAG', + 'AUGSBURGER_FRIEDENSFEST', + ]; + + const allRegions = [ + 'BW', + 'BY', + 'BE', + 'BB', + 'HB', + 'HE', + 'HH', + 'MV', + 'NI', + 'NW', + 'RP', + 'SL', + 'SN', + 'ST', + 'SH', + 'TH', + 'BUND', + 'AUGSBURG', + 'ALL', + ]; + + /*! + * feiertage.js + * @repository https://github.com/sfakir/feiertagejs + * @docs https://github.com/sfakir/feiertagejs/blob/master/docs.md + * + * Copyright 2015-2021 Simon Fakir + * Released under the MIT license + */ + // translations + const defaultLanguage = 'de'; + let currentLanguage = defaultLanguage; + const translations = { + de: germanTranslations, + }; + /** + * adds a translation for the holidays (e.g. english). + * This also allows to override the German names. + * Hint: Interpolates German for missing translations + * @param {string} isoCode of the new language + * @param {TranslationTable} newTranslation map of {HolidayType} to translation stringg + */ + function addTranslation(isoCode, newTranslation) { + const code = isoCode.toLowerCase(); + const defaultTranslation = translations[defaultLanguage]; + let missingFields = false; + // fill new Translation with default Language + for (const holiday of allHolidays) { + if (!newTranslation[holiday]) { + missingFields = true; + newTranslation[holiday] = defaultTranslation[holiday]; + } + } + if (missingFields) { + console.warn('[feiertagejs] addTranslation: you did not add all holidays in your translation! Took German as fallback'); + } + translations[code] = newTranslation; + } + /** + * Set a language to default language + * @param {string} isoCode + */ + function setLanguage(isoCode) { + const code = isoCode.toLowerCase(); + if (!translations[code]) { + throw new TypeError(`[feiertagejs] tried to set language to ${code} but the translation is missing. Please use addTranslation(isoCode,object) first`); + } + currentLanguage = isoCode; + } + /** + * Get currently set language + * @returns {string} + */ + function getLanguage() { + return currentLanguage; + } + // holidays api + /** + * Checks if a specific date is sunday or holiday. + * @param date + * @param region + * @returns {boolean} + */ + function isSunOrHoliday(date, region) { + checkRegion(region); + return date.getDay() === 0 || isHoliday(date, region); + } + /** + * Check is specific date is holiday. + * @param date + * @param {Region} region two character {@link Region} code + * @returns {boolean} + */ + function isHoliday(date, region) { + checkRegion(region); + const year = date.getFullYear(); + const internalDate = toUtcTimestamp(date); + const holidays = getHolidaysAsUtcTimestamps(year, region); + return holidays.indexOf(internalDate) !== -1; + } + function getHolidayByDate(date, region = 'ALL') { + checkRegion(region); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + return holidays.find((holiday) => holiday.equals(date)); + } + // additional runtime checks + /** + * Checks if the given region is a valid {@link Region}. + * + * @param region {@link Region} to check + * @throws {Error} + * @private + */ + function checkRegion(region) { + if (region === null || region === undefined) { + throw new Error(`Region must not be undefined or null`); + } + if (allRegions.indexOf(region) === -1) { + throw new Error(`Invalid region: ${region}! Must be one of ${allRegions.toString()}`); + } + } + /** + * Checks if the given holidayName is a valid {@link HolidayType}. + * @param holidayName {@link HolidayType} to check + * @throws {Error} + * @private + */ + function checkHolidayType(holidayName) { + if (holidayName === null || holidayName === undefined) { + throw new TypeError('holidayName must not be null or undefined'); + } + if (allHolidays.indexOf(holidayName) === -1) { + throw new Error(`feiertage.js: invalid holiday type "${holidayName}"! Must be one of ${allHolidays.toString()}`); + } + } + function isSpecificHoliday(date, holidayName, region = 'ALL') { + checkRegion(region); + checkHolidayType(holidayName); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + const foundHoliday = holidays.find((holiday) => holiday.equals(date)); + if (!foundHoliday) { + return false; + } + return foundHoliday.name === holidayName; + } + /** + * Returns all holidays of a year in a {@link Region}. + * @param year + * @param region + * @returns {Array.} + */ + function getHolidays(year, region) { + let y; + if (typeof year === 'string') { + y = parseInt(year, 10); + } + else { + y = year; + } + checkRegion(region); + return getHolidaysOfYear(y, region); + } + /** + * + * @param {number} year + * @param region + * @returns {number[]} + * @private + */ + function getHolidaysAsUtcTimestamps(year, region) { + const holidays = getHolidaysOfYear(year, region); + return holidays.map((holiday) => toUtcTimestamp(holiday.date)); + } + /** + * + * @param {number} year + * @param region + * @returns {{objects: Array., integers}} + * @private + */ + function getHolidaysOfYear(year, region) { + const easterDate = getEasterDate(year); + const karfreitag = addDays(new Date(easterDate.getTime()), -2); + const ostermontag = addDays(new Date(easterDate.getTime()), 1); + const christiHimmelfahrt = addDays(new Date(easterDate.getTime()), 39); + const pfingstsonntag = addDays(new Date(easterDate.getTime()), 49); + const pfingstmontag = addDays(new Date(easterDate.getTime()), 50); + const holidays = [ + ...getCommonHolidays(year), + newHoliday('KARFREITAG', karfreitag), + newHoliday('OSTERMONTAG', ostermontag), + newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt), + newHoliday('PFINGSTMONTAG', pfingstmontag), + ]; + addHeiligeDreiKoenige(year, region, holidays); + addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, holidays); + addFronleichnam(region, easterDate, holidays); + addMariaeHimmelfahrt(year, region, holidays); + addReformationstag(year, region, holidays); + addAllerheiligen(year, region, holidays); + addBussUndBetttag(year, region, holidays); + addWeltkindertag(year, region, holidays); + addWeltfrauenTag(year, region, holidays); + addRegionalHolidays(year, region, holidays); + return holidays.sort((a, b) => a.date.getTime() - b.date.getTime()); + } + function getCommonHolidays(year) { + return [ + newHoliday('NEUJAHRSTAG', makeDate(year, 1, 1)), + newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)), + newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)), + newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)), + newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)), + ]; + } + function addRegionalHolidays(year, region, feiertageObjects) { + if (region === 'AUGSBURG') { + feiertageObjects.push(newHoliday('AUGSBURGER_FRIEDENSFEST', makeDate(year, 8, 8))); + } + } + function addHeiligeDreiKoenige(year, region, feiertageObjects) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ST' || + region === 'ALL') { + feiertageObjects.push(newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6))); + } + } + function addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, feiertageObjects) { + if (region === 'BB' || region === 'ALL') { + feiertageObjects.push(newHoliday('OSTERSONNTAG', easterDate), newHoliday('PFINGSTSONNTAG', pfingstsonntag)); + } + } + function addFronleichnam(region, easterDate, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'HE' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + const fronleichnam = addDays(new Date(easterDate.getTime()), 60); + holidays.push(newHoliday('FRONLEICHNAM', fronleichnam)); + } + } + function addMariaeHimmelfahrt(year, region, holidays) { + if (region === 'SL' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ALL') { + holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15))); + } + } + function addReformationstag(year, region, holidays) { + if (year === 2017 || + region === 'NI' || + region === 'BB' || + region === 'HB' || + region === 'HH' || + region === 'MV' || + region === 'SN' || + region === 'ST' || + region === 'TH' || + region === 'SH' || + region === 'ALL') { + holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31))); + } + } + function addAllerheiligen(year, region, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1))); + } + } + function addBussUndBetttag(year, region, holidays) { + if (region === 'SN' || region === 'ALL') { + // @todo write test + const bussbettag = getBussBettag(year); + holidays.push(newHoliday('BUBETAG', makeDate(bussbettag.getUTCFullYear(), bussbettag.getUTCMonth() + 1, bussbettag.getUTCDate()))); + } + } + function addWeltkindertag(year, region, holidays) { + if (year >= 2019 && (region === 'TH' || region === 'ALL')) { + holidays.push(newHoliday('WELTKINDERTAG', makeDate(year, 9, 20))); + } + } + function addWeltfrauenTag(year, region, feiertageObjects) { + if (year <= 2018) { + return; + } + if (region === 'BE' || region === 'ALL') { + // in Berlin ist der Weltfrauentag ein Feiertag seit 2018 + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } + if (region === 'MV' && year >= 2023) { + // in MV wird der Weltfrauentag erst ab 2023 eingeführt + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } + } + /** + * Calculates the Easter date of a given year. + * @param year {number} + * @returns {Date} Easter date + * @private + */ + function getEasterDate(year) { + const C = Math.floor(year / 100); + // tslint:disable:binary-expression-operand-order + // tslint generates false positives in the following blocks + const N = year - 19 * Math.floor(year / 19); + const K = Math.floor((C - 17) / 25); + let I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15; + I -= 30 * Math.floor(I / 30); + I -= + Math.floor(I / 28) * + (1 - + Math.floor(I / 28) * + Math.floor(29 / (I + 1)) * + Math.floor((21 - N) / 11)); + let J = year + Math.floor(year / 4) + I + 2 - C + Math.floor(C / 4); + J -= 7 * Math.floor(J / 7); + const L = I - J; + const M = 3 + Math.floor((L + 40) / 44); + const D = L + 28 - 31 * Math.floor(M / 4); + // tslint:enable:binary-expression-operand-order + return new Date(year, M - 1, D); + } + /** + * Computes the "Buss- und Bettag"'s date. + * @param jahr {number} + * @returns {Date} the year's "Buss- und Bettag" date + * @private + */ + function getBussBettag(jahr) { + const weihnachten = new Date(jahr, 11, 25, 12, 0, 0); + const ersterAdventOffset = 32; + let wochenTagOffset = weihnachten.getDay() % 7; + if (wochenTagOffset === 0) { + wochenTagOffset = 7; + } + const tageVorWeihnachten = wochenTagOffset + ersterAdventOffset; + let bbtag = new Date(weihnachten.getTime()); + bbtag = addDays(bbtag, -tageVorWeihnachten); + return bbtag; + } + /** + * Adds {@code days} days to the given {@link Date}. + * @param date + * @param days + * @returns {Date} + * @private + */ + function addDays(date, days) { + const changedDate = new Date(date); + changedDate.setDate(date.getDate() + days); + return changedDate; + } + /** + * Creates a new {@link Date}. + * @param year + * @param naturalMonth month (1-12) + * @param day + * @returns {Date} + * @private + */ + function makeDate(year, naturalMonth, day) { + return new Date(year, naturalMonth - 1, day); + } + /** + * + * @param name + * @param date + * @returns {Holiday} + * @private + */ + function newHoliday(name, date) { + return { + name, + date, + dateString: localeDateObjectToDateString(date), + trans(lang = currentLanguage) { + console.warn('FeiertageJs: You are using "Holiday.trans() method. This will be replaced in the next major version with translate()"'); + return this.translate(lang); + }, + translate(lang = currentLanguage) { + return lang === undefined || lang === null + ? undefined + : translations[lang][this.name]; + }, + getNormalizedDate() { + return toUtcTimestamp(this.date); + }, + equals(otherDate) { + const dateString = localeDateObjectToDateString(otherDate); + return this.dateString === dateString; + }, + }; + } + /** + * + * @param date + * @returns {string} + * @private + */ + function localeDateObjectToDateString(date) { + const normalizedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000); + normalizedDate.setUTCHours(0, 0, 0, 0); + return normalizedDate.toISOString().slice(0, 10); + } + /** + * Returns the UTC timestamp of the given date with hours, minutes, seconds, and milliseconds set to zero. + * @param date + * @returns {number} UTC timestamp + */ + function toUtcTimestamp(date) { + const internalDate = new Date(date); + internalDate.setHours(0, 0, 0, 0); + return internalDate.getTime(); + } + + exports.addTranslation = addTranslation; + exports.getHolidayByDate = getHolidayByDate; + exports.getHolidays = getHolidays; + exports.getLanguage = getLanguage; + exports.isHoliday = isHoliday; + exports.isSpecificHoliday = isSpecificHoliday; + exports.isSunOrHoliday = isSunOrHoliday; + exports.setLanguage = setLanguage; + +})); +//# sourceMappingURL=feiertage.umd.cjs.map diff --git a/node_modules/feiertagejs/build/feiertage.umd.cjs.map b/node_modules/feiertagejs/build/feiertage.umd.cjs.map new file mode 100644 index 0000000..8f6c730 --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.umd.cjs.map @@ -0,0 +1 @@ +{"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 (incompelte) !\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.}\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., 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),\n newHoliday('OSTERMONTAG', ostermontag),\n newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt),\n newHoliday('PFINGSTMONTAG', pfingstmontag),\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)),\n newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)),\n newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)),\n newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)),\n newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)),\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)),\n );\n }\n}\nfunction addHeiligeDreiKoenige(\n year: number,\n region: Region,\n feiertageObjects: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ST' ||\n region === 'ALL'\n ) {\n feiertageObjects.push(\n newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6)),\n );\n }\n}\n\nfunction addEasterAndPfingsten(\n year: number,\n region: Region,\n easterDate: Date,\n pfingstsonntag: Date,\n feiertageObjects: Holiday[],\n): void {\n if (region === 'BB' || region === 'ALL') {\n feiertageObjects.push(\n newHoliday('OSTERSONNTAG', easterDate),\n newHoliday('PFINGSTSONNTAG', pfingstsonntag),\n );\n }\n}\n\nfunction addFronleichnam(\n region: Region,\n easterDate: Date,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'HE' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n const fronleichnam = addDays(new Date(easterDate.getTime()), 60);\n holidays.push(newHoliday('FRONLEICHNAM', fronleichnam));\n }\n}\n\nfunction addMariaeHimmelfahrt(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'SL' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15)));\n }\n}\n\nfunction addReformationstag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n year === 2017 ||\n region === 'NI' ||\n region === 'BB' ||\n region === 'HB' ||\n region === 'HH' ||\n region === 'MV' ||\n region === 'SN' ||\n region === 'ST' ||\n region === 'TH' ||\n region === 'SH' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31)));\n }\n}\n\nfunction addAllerheiligen(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1)));\n }\n}\n\nfunction addBussUndBetttag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\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 ),\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)));\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)));\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)));\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): Holiday {\n return {\n name,\n date,\n dateString: localeDateObjectToDateString(date),\n trans(lang: string = currentLanguage): string | undefined {\n console.warn(\n 'FeiertageJs: You are using \"Holiday.trans() method. This will be replaced in the next major version with translate()\"',\n );\n return this.translate(lang);\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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"} \ No newline at end of file diff --git a/node_modules/feiertagejs/build/feiertage.umd.js b/node_modules/feiertagejs/build/feiertage.umd.js new file mode 100644 index 0000000..11a8d3e --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.umd.js @@ -0,0 +1,496 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () { + var current = global.feiertagejs; + var exports = global.feiertagejs = {}; + factory(exports); + exports.noConflict = function () { global.feiertagejs = current; return exports; }; + })()); +})(this, (function (exports) { 'use strict'; + + const germanTranslations = { + NEUJAHRSTAG: 'Neujahrstag', + HEILIGEDREIKOENIGE: 'Heilige Drei Könige', + KARFREITAG: 'Karfreitag', + OSTERSONNTAG: 'Ostersonntag', + OSTERMONTAG: 'Ostermontag', + TAG_DER_ARBEIT: 'Tag der Arbeit', + CHRISTIHIMMELFAHRT: 'Christi Himmelfahrt', + PFINGSTSONNTAG: 'Pfingstsonntag', + PFINGSTMONTAG: 'Pfingstmontag', + FRONLEICHNAM: 'Fronleichnam', + MARIAHIMMELFAHRT: 'Mariä Himmelfahrt', + DEUTSCHEEINHEIT: 'Tag der Deutschen Einheit', + REFORMATIONSTAG: 'Reformationstag', + ALLERHEILIGEN: 'Allerheiligen', + BUBETAG: 'Buß- und Bettag', + ERSTERWEIHNACHTSFEIERTAG: '1. Weihnachtstag', + ZWEITERWEIHNACHTSFEIERTAG: '2. Weihnachtstag', + WELTKINDERTAG: 'Weltkindertag', + WELTFRAUENTAG: 'Weltfrauentag', + AUGSBURGER_FRIEDENSFEST: 'Augsburger Friedensfest', + }; + + const allHolidays = [ + 'NEUJAHRSTAG', + 'HEILIGEDREIKOENIGE', + 'KARFREITAG', + 'OSTERSONNTAG', + 'OSTERMONTAG', + 'TAG_DER_ARBEIT', + 'CHRISTIHIMMELFAHRT', + 'MARIAHIMMELFAHRT', + 'PFINGSTSONNTAG', + 'PFINGSTMONTAG', + 'FRONLEICHNAM', + 'DEUTSCHEEINHEIT', + 'REFORMATIONSTAG', + 'ALLERHEILIGEN', + 'BUBETAG', + 'ERSTERWEIHNACHTSFEIERTAG', + 'ZWEITERWEIHNACHTSFEIERTAG', + 'WELTKINDERTAG', + 'WELTFRAUENTAG', + 'AUGSBURGER_FRIEDENSFEST', + ]; + + const allRegions = [ + 'BW', + 'BY', + 'BE', + 'BB', + 'HB', + 'HE', + 'HH', + 'MV', + 'NI', + 'NW', + 'RP', + 'SL', + 'SN', + 'ST', + 'SH', + 'TH', + 'BUND', + 'AUGSBURG', + 'ALL', + ]; + + /*! + * feiertage.js + * @repository https://github.com/sfakir/feiertagejs + * @docs https://github.com/sfakir/feiertagejs/blob/master/docs.md + * + * Copyright 2015-2021 Simon Fakir + * Released under the MIT license + */ + // translations + const defaultLanguage = 'de'; + let currentLanguage = defaultLanguage; + const translations = { + de: germanTranslations, + }; + /** + * adds a translation for the holidays (e.g. english). + * This also allows to override the German names. + * Hint: Interpolates German for missing translations + * @param {string} isoCode of the new language + * @param {TranslationTable} newTranslation map of {HolidayType} to translation stringg + */ + function addTranslation(isoCode, newTranslation) { + const code = isoCode.toLowerCase(); + const defaultTranslation = translations[defaultLanguage]; + let missingFields = false; + // fill new Translation with default Language + for (const holiday of allHolidays) { + if (!newTranslation[holiday]) { + missingFields = true; + newTranslation[holiday] = defaultTranslation[holiday]; + } + } + if (missingFields) { + console.warn('[feiertagejs] addTranslation: you did not add all holidays in your translation! Took German as fallback'); + } + translations[code] = newTranslation; + } + /** + * Set a language to default language + * @param {string} isoCode + */ + function setLanguage(isoCode) { + const code = isoCode.toLowerCase(); + if (!translations[code]) { + throw new TypeError(`[feiertagejs] tried to set language to ${code} but the translation is missing. Please use addTranslation(isoCode,object) first`); + } + currentLanguage = isoCode; + } + /** + * Get currently set language + * @returns {string} + */ + function getLanguage() { + return currentLanguage; + } + // holidays api + /** + * Checks if a specific date is sunday or holiday. + * @param date + * @param region + * @returns {boolean} + */ + function isSunOrHoliday(date, region) { + checkRegion(region); + return date.getDay() === 0 || isHoliday(date, region); + } + /** + * Check is specific date is holiday. + * @param date + * @param {Region} region two character {@link Region} code + * @returns {boolean} + */ + function isHoliday(date, region) { + checkRegion(region); + const year = date.getFullYear(); + const internalDate = toUtcTimestamp(date); + const holidays = getHolidaysAsUtcTimestamps(year, region); + return holidays.indexOf(internalDate) !== -1; + } + function getHolidayByDate(date, region = 'ALL') { + checkRegion(region); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + return holidays.find((holiday) => holiday.equals(date)); + } + // additional runtime checks + /** + * Checks if the given region is a valid {@link Region}. + * + * @param region {@link Region} to check + * @throws {Error} + * @private + */ + function checkRegion(region) { + if (region === null || region === undefined) { + throw new Error(`Region must not be undefined or null`); + } + if (allRegions.indexOf(region) === -1) { + throw new Error(`Invalid region: ${region}! Must be one of ${allRegions.toString()}`); + } + } + /** + * Checks if the given holidayName is a valid {@link HolidayType}. + * @param holidayName {@link HolidayType} to check + * @throws {Error} + * @private + */ + function checkHolidayType(holidayName) { + if (holidayName === null || holidayName === undefined) { + throw new TypeError('holidayName must not be null or undefined'); + } + if (allHolidays.indexOf(holidayName) === -1) { + throw new Error(`feiertage.js: invalid holiday type "${holidayName}"! Must be one of ${allHolidays.toString()}`); + } + } + function isSpecificHoliday(date, holidayName, region = 'ALL') { + checkRegion(region); + checkHolidayType(holidayName); + const holidays = getHolidaysOfYear(date.getFullYear(), region); + const foundHoliday = holidays.find((holiday) => holiday.equals(date)); + if (!foundHoliday) { + return false; + } + return foundHoliday.name === holidayName; + } + /** + * Returns all holidays of a year in a {@link Region}. + * @param year + * @param region + * @returns {Array.} + */ + function getHolidays(year, region) { + let y; + if (typeof year === 'string') { + y = parseInt(year, 10); + } + else { + y = year; + } + checkRegion(region); + return getHolidaysOfYear(y, region); + } + /** + * + * @param {number} year + * @param region + * @returns {number[]} + * @private + */ + function getHolidaysAsUtcTimestamps(year, region) { + const holidays = getHolidaysOfYear(year, region); + return holidays.map((holiday) => toUtcTimestamp(holiday.date)); + } + /** + * + * @param {number} year + * @param region + * @returns {{objects: Array., integers}} + * @private + */ + function getHolidaysOfYear(year, region) { + const easterDate = getEasterDate(year); + const karfreitag = addDays(new Date(easterDate.getTime()), -2); + const ostermontag = addDays(new Date(easterDate.getTime()), 1); + const christiHimmelfahrt = addDays(new Date(easterDate.getTime()), 39); + const pfingstsonntag = addDays(new Date(easterDate.getTime()), 49); + const pfingstmontag = addDays(new Date(easterDate.getTime()), 50); + const holidays = [ + ...getCommonHolidays(year), + newHoliday('KARFREITAG', karfreitag), + newHoliday('OSTERMONTAG', ostermontag), + newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt), + newHoliday('PFINGSTMONTAG', pfingstmontag), + ]; + addHeiligeDreiKoenige(year, region, holidays); + addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, holidays); + addFronleichnam(region, easterDate, holidays); + addMariaeHimmelfahrt(year, region, holidays); + addReformationstag(year, region, holidays); + addAllerheiligen(year, region, holidays); + addBussUndBetttag(year, region, holidays); + addWeltkindertag(year, region, holidays); + addWeltfrauenTag(year, region, holidays); + addRegionalHolidays(year, region, holidays); + return holidays.sort((a, b) => a.date.getTime() - b.date.getTime()); + } + function getCommonHolidays(year) { + return [ + newHoliday('NEUJAHRSTAG', makeDate(year, 1, 1)), + newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)), + newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)), + newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)), + newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)), + ]; + } + function addRegionalHolidays(year, region, feiertageObjects) { + if (region === 'AUGSBURG') { + feiertageObjects.push(newHoliday('AUGSBURGER_FRIEDENSFEST', makeDate(year, 8, 8))); + } + } + function addHeiligeDreiKoenige(year, region, feiertageObjects) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ST' || + region === 'ALL') { + feiertageObjects.push(newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6))); + } + } + function addEasterAndPfingsten(year, region, easterDate, pfingstsonntag, feiertageObjects) { + if (region === 'BB' || region === 'ALL') { + feiertageObjects.push(newHoliday('OSTERSONNTAG', easterDate), newHoliday('PFINGSTSONNTAG', pfingstsonntag)); + } + } + function addFronleichnam(region, easterDate, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'HE' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + const fronleichnam = addDays(new Date(easterDate.getTime()), 60); + holidays.push(newHoliday('FRONLEICHNAM', fronleichnam)); + } + } + function addMariaeHimmelfahrt(year, region, holidays) { + if (region === 'SL' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'ALL') { + holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15))); + } + } + function addReformationstag(year, region, holidays) { + if (year === 2017 || + region === 'NI' || + region === 'BB' || + region === 'HB' || + region === 'HH' || + region === 'MV' || + region === 'SN' || + region === 'ST' || + region === 'TH' || + region === 'SH' || + region === 'ALL') { + holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31))); + } + } + function addAllerheiligen(year, region, holidays) { + if (region === 'BW' || + region === 'BY' || + region === 'AUGSBURG' || + region === 'NW' || + region === 'RP' || + region === 'SL' || + region === 'ALL') { + holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1))); + } + } + function addBussUndBetttag(year, region, holidays) { + if (region === 'SN' || region === 'ALL') { + // @todo write test + const bussbettag = getBussBettag(year); + holidays.push(newHoliday('BUBETAG', makeDate(bussbettag.getUTCFullYear(), bussbettag.getUTCMonth() + 1, bussbettag.getUTCDate()))); + } + } + function addWeltkindertag(year, region, holidays) { + if (year >= 2019 && (region === 'TH' || region === 'ALL')) { + holidays.push(newHoliday('WELTKINDERTAG', makeDate(year, 9, 20))); + } + } + function addWeltfrauenTag(year, region, feiertageObjects) { + if (year <= 2018) { + return; + } + if (region === 'BE' || region === 'ALL') { + // in Berlin ist der Weltfrauentag ein Feiertag seit 2018 + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } + if (region === 'MV' && year >= 2023) { + // in MV wird der Weltfrauentag erst ab 2023 eingeführt + feiertageObjects.push(newHoliday('WELTFRAUENTAG', makeDate(year, 3, 8))); + } + } + /** + * Calculates the Easter date of a given year. + * @param year {number} + * @returns {Date} Easter date + * @private + */ + function getEasterDate(year) { + const C = Math.floor(year / 100); + // tslint:disable:binary-expression-operand-order + // tslint generates false positives in the following blocks + const N = year - 19 * Math.floor(year / 19); + const K = Math.floor((C - 17) / 25); + let I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15; + I -= 30 * Math.floor(I / 30); + I -= + Math.floor(I / 28) * + (1 - + Math.floor(I / 28) * + Math.floor(29 / (I + 1)) * + Math.floor((21 - N) / 11)); + let J = year + Math.floor(year / 4) + I + 2 - C + Math.floor(C / 4); + J -= 7 * Math.floor(J / 7); + const L = I - J; + const M = 3 + Math.floor((L + 40) / 44); + const D = L + 28 - 31 * Math.floor(M / 4); + // tslint:enable:binary-expression-operand-order + return new Date(year, M - 1, D); + } + /** + * Computes the "Buss- und Bettag"'s date. + * @param jahr {number} + * @returns {Date} the year's "Buss- und Bettag" date + * @private + */ + function getBussBettag(jahr) { + const weihnachten = new Date(jahr, 11, 25, 12, 0, 0); + const ersterAdventOffset = 32; + let wochenTagOffset = weihnachten.getDay() % 7; + if (wochenTagOffset === 0) { + wochenTagOffset = 7; + } + const tageVorWeihnachten = wochenTagOffset + ersterAdventOffset; + let bbtag = new Date(weihnachten.getTime()); + bbtag = addDays(bbtag, -tageVorWeihnachten); + return bbtag; + } + /** + * Adds {@code days} days to the given {@link Date}. + * @param date + * @param days + * @returns {Date} + * @private + */ + function addDays(date, days) { + const changedDate = new Date(date); + changedDate.setDate(date.getDate() + days); + return changedDate; + } + /** + * Creates a new {@link Date}. + * @param year + * @param naturalMonth month (1-12) + * @param day + * @returns {Date} + * @private + */ + function makeDate(year, naturalMonth, day) { + return new Date(year, naturalMonth - 1, day); + } + /** + * + * @param name + * @param date + * @returns {Holiday} + * @private + */ + function newHoliday(name, date) { + return { + name, + date, + dateString: localeDateObjectToDateString(date), + trans(lang = currentLanguage) { + console.warn('FeiertageJs: You are using "Holiday.trans() method. This will be replaced in the next major version with translate()"'); + return this.translate(lang); + }, + translate(lang = currentLanguage) { + return lang === undefined || lang === null + ? undefined + : translations[lang][this.name]; + }, + getNormalizedDate() { + return toUtcTimestamp(this.date); + }, + equals(otherDate) { + const dateString = localeDateObjectToDateString(otherDate); + return this.dateString === dateString; + }, + }; + } + /** + * + * @param date + * @returns {string} + * @private + */ + function localeDateObjectToDateString(date) { + const normalizedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000); + normalizedDate.setUTCHours(0, 0, 0, 0); + return normalizedDate.toISOString().slice(0, 10); + } + /** + * Returns the UTC timestamp of the given date with hours, minutes, seconds, and milliseconds set to zero. + * @param date + * @returns {number} UTC timestamp + */ + function toUtcTimestamp(date) { + const internalDate = new Date(date); + internalDate.setHours(0, 0, 0, 0); + return internalDate.getTime(); + } + + exports.addTranslation = addTranslation; + exports.getHolidayByDate = getHolidayByDate; + exports.getHolidays = getHolidays; + exports.getLanguage = getLanguage; + exports.isHoliday = isHoliday; + exports.isSpecificHoliday = isSpecificHoliday; + exports.isSunOrHoliday = isSunOrHoliday; + exports.setLanguage = setLanguage; + +})); +//# sourceMappingURL=feiertage.umd.js.map diff --git a/node_modules/feiertagejs/build/feiertage.umd.js.map b/node_modules/feiertagejs/build/feiertage.umd.js.map new file mode 100644 index 0000000..55c8bd7 --- /dev/null +++ b/node_modules/feiertagejs/build/feiertage.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"feiertage.umd.js","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 (incompelte) !\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.}\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., 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),\n newHoliday('OSTERMONTAG', ostermontag),\n newHoliday('CHRISTIHIMMELFAHRT', christiHimmelfahrt),\n newHoliday('PFINGSTMONTAG', pfingstmontag),\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)),\n newHoliday('TAG_DER_ARBEIT', makeDate(year, 5, 1)),\n newHoliday('DEUTSCHEEINHEIT', makeDate(year, 10, 3)),\n newHoliday('ERSTERWEIHNACHTSFEIERTAG', makeDate(year, 12, 25)),\n newHoliday('ZWEITERWEIHNACHTSFEIERTAG', makeDate(year, 12, 26)),\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)),\n );\n }\n}\nfunction addHeiligeDreiKoenige(\n year: number,\n region: Region,\n feiertageObjects: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ST' ||\n region === 'ALL'\n ) {\n feiertageObjects.push(\n newHoliday('HEILIGEDREIKOENIGE', makeDate(year, 1, 6)),\n );\n }\n}\n\nfunction addEasterAndPfingsten(\n year: number,\n region: Region,\n easterDate: Date,\n pfingstsonntag: Date,\n feiertageObjects: Holiday[],\n): void {\n if (region === 'BB' || region === 'ALL') {\n feiertageObjects.push(\n newHoliday('OSTERSONNTAG', easterDate),\n newHoliday('PFINGSTSONNTAG', pfingstsonntag),\n );\n }\n}\n\nfunction addFronleichnam(\n region: Region,\n easterDate: Date,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'HE' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n const fronleichnam = addDays(new Date(easterDate.getTime()), 60);\n holidays.push(newHoliday('FRONLEICHNAM', fronleichnam));\n }\n}\n\nfunction addMariaeHimmelfahrt(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'SL' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('MARIAHIMMELFAHRT', makeDate(year, 8, 15)));\n }\n}\n\nfunction addReformationstag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n year === 2017 ||\n region === 'NI' ||\n region === 'BB' ||\n region === 'HB' ||\n region === 'HH' ||\n region === 'MV' ||\n region === 'SN' ||\n region === 'ST' ||\n region === 'TH' ||\n region === 'SH' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('REFORMATIONSTAG', makeDate(year, 10, 31)));\n }\n}\n\nfunction addAllerheiligen(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\n if (\n region === 'BW' ||\n region === 'BY' ||\n region === 'AUGSBURG' ||\n region === 'NW' ||\n region === 'RP' ||\n region === 'SL' ||\n region === 'ALL'\n ) {\n holidays.push(newHoliday('ALLERHEILIGEN', makeDate(year, 11, 1)));\n }\n}\n\nfunction addBussUndBetttag(\n year: number,\n region: Region,\n holidays: Holiday[],\n): void {\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 ),\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)));\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)));\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)));\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): Holiday {\n return {\n name,\n date,\n dateString: localeDateObjectToDateString(date),\n trans(lang: string = currentLanguage): string | undefined {\n console.warn(\n 'FeiertageJs: You are using \"Holiday.trans() method. This will be replaced in the next major version with translate()\"',\n );\n return this.translate(lang);\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":";;;;;;;;;;;IAEO,MAAM,kBAAkB,GAAqB;IAClD,IAAA,WAAW,EAAE,aAAa;IAC1B,IAAA,kBAAkB,EAAE,qBAAqB;IACzC,IAAA,UAAU,EAAE,YAAY;IACxB,IAAA,YAAY,EAAE,cAAc;IAC5B,IAAA,WAAW,EAAE,aAAa;IAC1B,IAAA,cAAc,EAAE,gBAAgB;IAChC,IAAA,kBAAkB,EAAE,qBAAqB;IACzC,IAAA,cAAc,EAAE,gBAAgB;IAChC,IAAA,aAAa,EAAE,eAAe;IAC9B,IAAA,YAAY,EAAE,cAAc;IAC5B,IAAA,gBAAgB,EAAE,mBAAmB;IACrC,IAAA,eAAe,EAAE,2BAA2B;IAC5C,IAAA,eAAe,EAAE,iBAAiB;IAClC,IAAA,aAAa,EAAE,eAAe;IAC9B,IAAA,OAAO,EAAE,iBAAiB;IAC1B,IAAA,wBAAwB,EAAE,kBAAkB;IAC5C,IAAA,yBAAyB,EAAE,kBAAkB;IAC7C,IAAA,aAAa,EAAE,eAAe;IAC9B,IAAA,aAAa,EAAE,eAAe;IAC9B,IAAA,uBAAuB,EAAE,yBAAyB;KACnD;;ICDM,MAAM,WAAW,GAAkB;QACxC,aAAa;QACb,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,oBAAoB;QACpB,kBAAkB;QAClB,gBAAgB;QAChB,eAAe;QACf,cAAc;QACd,iBAAiB;QACjB,iBAAiB;QACjB,eAAe;QACf,SAAS;QACT,0BAA0B;QAC1B,2BAA2B;QAC3B,eAAe;QACf,eAAe;QACf,yBAAyB;KAC1B;;ICrBM,MAAM,UAAU,GAAa;QAClC,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,UAAU;QACV,KAAK;KACN;;IC1CD;;;;;;;IAOG;IAaH;IAEA,MAAM,eAAe,GAAG,IAAI,CAAC;IAC7B,IAAI,eAAe,GAAW,eAAe,CAAC;IAO9C,MAAM,YAAY,GAAwC;IACxD,IAAA,EAAE,EAAE,kBAAkB;KACvB,CAAC;IAEF;;;;;;IAMG;IACa,SAAA,cAAc,CAC5B,OAAe,EACf,cAAgC,EAAA;IAEhC,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,IAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,aAAa,GAAG,KAAK,CAAC;;IAG1B,IAAA,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;IACjC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAC5B,aAAa,GAAG,IAAI,CAAC;gBACrB,cAAc,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvD,SAAA;IACF,KAAA;IACD,IAAA,IAAI,aAAa,EAAE;IACjB,QAAA,OAAO,CAAC,IAAI,CACV,yGAAyG,CAC1G,CAAC;IACH,KAAA;IAED,IAAA,YAAY,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;IACtC,CAAC;IAED;;;IAGG;IACG,SAAU,WAAW,CAAC,OAAe,EAAA;IACzC,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,IAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;IACvB,QAAA,MAAM,IAAI,SAAS,CACjB,0CAA0C,IAAI,CAAA,gFAAA,CAAkF,CACjI,CAAC;IACH,KAAA;QACD,eAAe,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED;;;IAGG;aACa,WAAW,GAAA;IACzB,IAAA,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;IAEA;;;;;IAKG;IACa,SAAA,cAAc,CAAC,IAAU,EAAE,MAAc,EAAA;QACvD,WAAW,CAAC,MAAM,CAAC,CAAC;IACpB,IAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED;;;;;IAKG;IACa,SAAA,SAAS,CAAC,IAAU,EAAE,MAAc,EAAA;QAClD,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,IAAA,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE1D,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;aAEe,gBAAgB,CAC9B,IAAU,EACV,SAAiB,KAAK,EAAA;QAEtB,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/D,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;IAEA;;;;;;IAMG;IACH,SAAS,WAAW,CAAC,MAAe,EAAA;IAClC,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;IAC3C,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,CAAsC,CAAC,CAAC;IACzD,KAAA;QACD,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;IACrC,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,gBAAA,EAAmB,MAAM,CAAA,iBAAA,EAAoB,UAAU,CAAC,QAAQ,EAAE,CAAE,CAAA,CACrE,CAAC;IACH,KAAA;IACH,CAAC;IAED;;;;;IAKG;IACH,SAAS,gBAAgB,CAAC,WAAyB,EAAA;IACjD,IAAA,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE;IACrD,QAAA,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IAClE,KAAA;QACD,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3C,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,oCAAA,EAAuC,WAAW,CAAA,kBAAA,EAAqB,WAAW,CAAC,QAAQ,EAAE,CAAE,CAAA,CAChG,CAAC;IACH,KAAA;IACH,CAAC;IAEK,SAAU,iBAAiB,CAC/B,IAAU,EACV,WAAwB,EACxB,SAAiB,KAAK,EAAA;QAEtB,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/D,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,EAAE;IACjB,QAAA,OAAO,KAAK,CAAC;IACd,KAAA;IACD,IAAA,OAAO,YAAY,CAAC,IAAI,KAAK,WAAW,CAAC;IAC3C,CAAC;IAED;;;;;IAKG;IACa,SAAA,WAAW,CAAC,IAAqB,EAAE,MAAc,EAAA;IAC/D,IAAA,IAAI,CAAS,CAAC;IACd,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC5B,QAAA,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxB,KAAA;IAAM,SAAA;YACL,CAAC,GAAG,IAAI,CAAC;IACV,KAAA;QAED,WAAW,CAAC,MAAM,CAAC,CAAC;IACpB,IAAA,OAAO,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;IAMG;IACH,SAAS,0BAA0B,CAAC,IAAY,EAAE,MAAc,EAAA;QAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;IAMG;IACH,SAAS,iBAAiB,CAAC,IAAY,EAAE,MAAc,EAAA;IACrD,IAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACnE,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAElE,IAAA,MAAM,QAAQ,GAAc;YAC1B,GAAG,iBAAiB,CAAC,IAAI,CAAC;IAC1B,QAAA,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC;IACpC,QAAA,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC;IACtC,QAAA,UAAU,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;IACpD,QAAA,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC;SAC3C,CAAC;IAEF,IAAA,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC1E,IAAA,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAA,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAA,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAA,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAA,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,IAAA,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAA,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEzC,IAAA,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,SAAS,iBAAiB,CAAC,IAAY,EAAA;QACrC,OAAO;YACL,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,UAAU,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,UAAU,CAAC,0BAA0B,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9D,UAAU,CAAC,2BAA2B,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SAChE,CAAC;IACJ,CAAC;IACD,SAAS,mBAAmB,CAC1B,IAAY,EACZ,MAAc,EACd,gBAA2B,EAAA;QAE3B,IAAI,MAAM,KAAK,UAAU,EAAE;IACzB,QAAA,gBAAgB,CAAC,IAAI,CACnB,UAAU,CAAC,yBAAyB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAC5D,CAAC;IACH,KAAA;IACH,CAAC;IACD,SAAS,qBAAqB,CAC5B,IAAY,EACZ,MAAc,EACd,gBAA2B,EAAA;QAE3B,IACE,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,UAAU;IACrB,QAAA,MAAM,KAAK,IAAI;YACf,MAAM,KAAK,KAAK,EAChB;IACA,QAAA,gBAAgB,CAAC,IAAI,CACnB,UAAU,CAAC,oBAAoB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CACvD,CAAC;IACH,KAAA;IACH,CAAC;IAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,MAAc,EACd,UAAgB,EAChB,cAAoB,EACpB,gBAA2B,EAAA;IAE3B,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE;IACvC,QAAA,gBAAgB,CAAC,IAAI,CACnB,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,EACtC,UAAU,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAC7C,CAAC;IACH,KAAA;IACH,CAAC;IAED,SAAS,eAAe,CACtB,MAAc,EACd,UAAgB,EAChB,QAAmB,EAAA;QAEnB,IACE,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,UAAU;IACrB,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;YACf,MAAM,KAAK,KAAK,EAChB;IACA,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;IACzD,KAAA;IACH,CAAC;IAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,MAAc,EACd,QAAmB,EAAA;QAEnB,IACE,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,UAAU;YACrB,MAAM,KAAK,KAAK,EAChB;IACA,QAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,KAAA;IACH,CAAC;IAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,MAAc,EACd,QAAmB,EAAA;QAEnB,IACE,IAAI,KAAK,IAAI;IACb,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;YACf,MAAM,KAAK,KAAK,EAChB;IACA,QAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,KAAA;IACH,CAAC;IAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,MAAc,EACd,QAAmB,EAAA;QAEnB,IACE,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,UAAU;IACrB,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;IACf,QAAA,MAAM,KAAK,IAAI;YACf,MAAM,KAAK,KAAK,EAChB;IACA,QAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,KAAA;IACH,CAAC;IAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,MAAc,EACd,QAAmB,EAAA;IAEnB,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE;;IAEvC,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,QAAA,QAAQ,CAAC,IAAI,CACX,UAAU,CACR,SAAS,EACT,QAAQ,CACN,UAAU,CAAC,cAAc,EAAE,EAC3B,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,EAC5B,UAAU,CAAC,UAAU,EAAE,CACxB,CACF,CACF,CAAC;IACH,KAAA;IACH,CAAC;IAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,MAAc,EACd,QAAmB,EAAA;IAEnB,IAAA,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,EAAE;IACzD,QAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,KAAA;IACH,CAAC;IAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,MAAc,EACd,gBAA2B,EAAA;QAE3B,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,OAAO;IACR,KAAA;IACD,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE;;IAEvC,QAAA,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,KAAA;IACD,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;;IAEnC,QAAA,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,KAAA;IACH,CAAC;IAED;;;;;IAKG;IACH,SAAS,aAAa,CAAC,IAAY,EAAA;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;;;IAGjC,IAAA,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5C,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACtE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7B,CAAC;IACC,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;IAClB,aAAC,CAAC;IACA,gBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;wBAChB,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;QAE1C,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;;;IAKG;IACH,SAAS,aAAa,CAAC,IAAY,EAAA;IACjC,IAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,kBAAkB,GAAG,EAAE,CAAC;QAC9B,IAAI,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAI,eAAe,KAAK,CAAC,EAAE;YACzB,eAAe,GAAG,CAAC,CAAC;IACrB,KAAA;IAED,IAAA,MAAM,kBAAkB,GAAG,eAAe,GAAG,kBAAkB,CAAC;QAEhE,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAE5C,IAAA,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;IAMG;IACH,SAAS,OAAO,CAAC,IAAU,EAAE,IAAY,EAAA;IACvC,IAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,IAAA,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;;;;IAOG;IACH,SAAS,QAAQ,CAAC,IAAY,EAAE,YAAoB,EAAE,GAAW,EAAA;QAC/D,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;IAMG;IACH,SAAS,UAAU,CAAC,IAAiB,EAAE,IAAU,EAAA;QAC/C,OAAO;YACL,IAAI;YACJ,IAAI;IACJ,QAAA,UAAU,EAAE,4BAA4B,CAAC,IAAI,CAAC;YAC9C,KAAK,CAAC,OAAe,eAAe,EAAA;IAClC,YAAA,OAAO,CAAC,IAAI,CACV,uHAAuH,CACxH,CAAC;IACF,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,SAAS,CAAC,OAAe,eAAe,EAAA;IACtC,YAAA,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;IACxC,kBAAE,SAAS;sBACT,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,iBAAiB,GAAA;IACf,YAAA,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC;IACD,QAAA,MAAM,CAAC,SAAe,EAAA;IACpB,YAAA,MAAM,UAAU,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAC3D,YAAA,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;;;;IAKG;IACH,SAAS,4BAA4B,CAAC,IAAU,EAAA;IAC9C,IAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAC7B,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CACtD,CAAC;QACF,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO,cAAc,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;;IAIG;IACH,SAAS,cAAc,CAAC,IAAU,EAAA;IAChC,IAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,IAAA,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC;IAChC;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/node_modules/feiertagejs/docs.md b/node_modules/feiertagejs/docs.md new file mode 100644 index 0000000..901e0c5 --- /dev/null +++ b/node_modules/feiertagejs/docs.md @@ -0,0 +1,144 @@ + + +### Table of Contents + +*Types* +- [HolidayType](#holidaytype) +- [Region](#region) +- [Holiday](#holiday) +- [allHolidays](#allholidays) +- [allRegions](#allregions) +- [TranslationTable](#translationtable) + +*API* +- [isHoliday(date, region)](#isholiday) +- [getHolidayByDate(date, region)](#getholidaybydate) +- [getHolidays(year, region)](#getholidays) +- [isSunOrHoliday(date, region)](#issunorholiday) +- [isSpecificHoliday(date, name, region)](#isspecificholiday) +- [addTranslation(isoCode, translation)](#addtranslation) +- [setLanguage(lng)](#setlanguage) +- [getLanguage()](#getlanguage) + + + +## Types + +### HolidayType + +Type: (`"NEUJAHRSTAG"` \| `"HEILIGEDREIKOENIGE"` \| `"KARFREITAG"` \| `"OSTERSONNTAG"` \| `"OSTERMONTAG"` \| `"TAG_DER_ARBEIT"` \| `"CHRISTIHIMMELFAHRT"` \| `"MARIAHIMMELFAHRT"` \| `"PFINGSTSONNTAG"` \| `"PFINGSTMONTAG"` \| `"FRONLEICHNAM"` \| `"DEUTSCHEEINHEIT"` \| `"REFORMATIONSTAG"` \| `"ALLERHEILIGEN"` \| `"BUBETAG"` \| `"ERSTERWEIHNACHTSFEIERTAG"` \| `"ZWEITERWEIHNACHTSFEIERTAG"` \| `"WELTKINDERTAG"` \| `"WELTFRAUENTAG"` \| `"AUGSBURGER_FRIEDENSFEST"`) + +### Region + +Type: (`"BW"` \| `"BY"` \| `"BE"` \| `"BB"` \| `"HB"` \| `"HE"` \| `"HH"` \| `"MV"` \| `"NI"` \| `"NW"` \| `"RP"` \| `"SL"` \| `"SN"` \| `"ST"` \| `"SH"` \| `"TH"` \| `"BUND"` \| `"ALL"`) + +As defined here: https://de.wikipedia.org/wiki/Land_(Deutschland)#Amtliche_bzw._Eigenbezeichnungen + +The difference between BUND and ALL is defined as follows: +* "ALL" refers to every holiday which is valid in **at least** one region. So a holiday that only applies to one state will be included. +* "BUND" refers to holidays that are valid in every region ("bundesweit"). So a holiday that only applies to one state will not be included. + +### Holiday + +Type: {name: [HolidayType](#holidaytype), date: [Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date), trans: function (lang: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?): [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), dateString: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), equals: function (date: [Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)): [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)} + +**Properties** + +- `name` **[HolidayType](#holidaytype)** +- `date` **[Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)** +- `trans` **function (lang: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?): [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** +- `dateString` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** +- `equals` **function (date: [Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)): [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** + +### allHolidays + +Type: [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[HolidayType](#holidaytype)> + +### allRegions + +Type: [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Region](#region)> + +### TranslationTable + +Map of [HolidayType](#holidaytype) to translation string. + +Type: {} + + +## API +### addTranslation() + +Adds a translation for the holidays (e.g. English). +This also allows overriding the German names. +Hint: Interpolates German for missing translations + +**Parameters** + +- `isoCode` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** of the new language +- `newTranslation` **[TranslationTable](#translationtable)** map of {HolidayType} to translation stringg + +### setLanguage() + +Set a language to default language + +**Parameters** + +- `isoCode` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** + +### getLanguage() + +Get currently set language + +Returns **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** + +### isSunOrHoliday() + +Checks if a specific date is sunday or holiday. + +**Parameters** + +- `date` **[Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)** +- `region` **[Region](#region)** + +Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** + +### isHoliday() + +Check is specific date is holiday. + +**Parameters** + +- `date` **[Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)** +- `region` **[Region](#region)** two character [Region](#region) code + +Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** + +### getHolidayByDate() + +**Parameters** + +- `date` **[Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)** +- `region` **[Region](#region)** (optional, default `'ALL'`) + +Returns **([Holiday](#holiday) | void)** + +### isSpecificHoliday() + +**Parameters** + +- `date` **[Date](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)** +- `holidayName` **[HolidayType](#holidaytype)** +- `region` **[Region](#region)** (optional, default `'ALL'`) + +Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** + +### getHolidays() + +Returns all holidays of a year in a [Region](#region). + +**Parameters** + +- `year` **([number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) \| [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))** +- `region` **[Region](#region)** + +Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Holiday](#holiday)>** diff --git a/node_modules/feiertagejs/index.d.ts b/node_modules/feiertagejs/index.d.ts new file mode 100644 index 0000000..4727191 --- /dev/null +++ b/node_modules/feiertagejs/index.d.ts @@ -0,0 +1,113 @@ +declare type Region = + | 'BW' // Baden-Württemberg + | 'BY' // Bayern + | 'BE' // Berlin + | 'BB' // Brandenburg + | 'HB' // Bremen + | 'HE' // Hessen + | 'HH' // Hamburg + | 'MV' // Mecklenburg-Vorpommern + | 'NI' // Niedersachsen + | 'NW' // Nordrhein-Westfalen + | 'RP' // Rheinland-Pfalz + | 'SL' // Saarland + | 'SN' // Sachsen + | 'ST' // Sachsen-Anhalt + | 'SH' // Schleswig-Holstein + | 'TH' // Thüringen + | 'BUND' // Gesamt-Deutschland + | 'AUGSBURG' + | 'ALL'; + +declare type Holiday = { + name: HolidayType; + date: Date; + trans?: (lang: string | undefined) => string; // deprecated; + translate: (lang?: string | undefined) => string; + dateString: string; + equals: (date: Date) => boolean; +}; + +declare type HolidayType = + | 'NEUJAHRSTAG' + | 'HEILIGEDREIKOENIGE' + | 'KARFREITAG' + | 'OSTERSONNTAG' + | 'OSTERMONTAG' + | 'TAG_DER_ARBEIT' + | 'CHRISTIHIMMELFAHRT' + | 'MARIAHIMMELFAHRT' + | 'PFINGSTSONNTAG' + | 'PFINGSTMONTAG' + | 'FRONLEICHNAM' + | 'DEUTSCHEEINHEIT' + | 'REFORMATIONSTAG' + | 'ALLERHEILIGEN' + | 'BUBETAG' + | 'ERSTERWEIHNACHTSFEIERTAG' + | 'ZWEITERWEIHNACHTSFEIERTAG'; + +/** + * Map of {@link HolidayType} to translation string. + */ +export type TranslationTable = { + [key: string]: string; +}; + +/** + * adds a translation for the holidays (e.g. english). + * This also allows to override the German names. + * Hint: Interpolates German for missing translations + * @param {string} isoCode of the new language + * @param {TranslationTable} newTranslation map of {HolidayType} to translation stringg + */ +declare function addTranslation( + isoCode: string, + newTranslation: TranslationTable, +): void; + +/** + * Set a language to default language + * @param {string} isoCode + */ +declare function setLanguage(isoCode: string): void; + +/** + * Get currently set language + * @returns {string} + */ +declare function getLanguage(): string; + +// holidays api + +/** + * Checks if a specific date is sunday or holiday. + * @param date + * @param region + * @returns {boolean} + */ +declare function isSunOrHoliday(date: Date, region: Region): boolean; + +/** + * Check is specific date is holiday. + * @param date + * @param {Region} region two character {@link Region} code + * @returns {boolean} + */ +declare function isHoliday(date: Date, region: Region): boolean; + +declare function getHolidayByDate(date: Date, region: Region): Holiday | void; + +declare function isSpecificHoliday( + date: Date, + holidayName: HolidayType, + region: Region, +): boolean; + +/** + * Returns all holidays of a year in a {@link Region}. + * @param year + * @param region + * @returns {Array.} + */ +declare function getHolidays(year: number | string, region: Region): Holiday[]; diff --git a/node_modules/feiertagejs/package.json b/node_modules/feiertagejs/package.json new file mode 100644 index 0000000..e8a9539 --- /dev/null +++ b/node_modules/feiertagejs/package.json @@ -0,0 +1,53 @@ +{ + "name": "feiertagejs", + "version": "1.3.9", + "description": "A module to calculate German holidays made for node.js", + "type": "module", + "main": "build/feiertage.umd.cjs", + "module": "build/feiertage.js", + "types": "index.d.ts", + "scripts": { + "test": "vitest run --coverage", + "test:w": "vitest watch", + "format": "prettier --write \"{**/*,*}.{ts,json}\" \"!coverage/**\" \"!build/**\" \"!package.json\" \"!package-lock.json\" --cache", + "lint": "eslint \"src\" \"spec\"", + "build": "rollup -c" + }, + "repository": { + "type": "git", + "url": "https://github.com/sfakir/feiertagejs" + }, + "keywords": [ + "node", + "holidays", + "feiertage", + "javascript" + ], + "engines": { + "node": ">=8.0.0" + }, + "author": "Simon Fakir", + "license": "MIT", + "bugs": { + "url": "https://github.com/sfakir/feiertagejs/issues" + }, + "homepage": "https://github.com/sfakir/feiertagejs", + "devDependencies": { + "@vitest/coverage-c8": "^0.26.2", + "prettier": "^2.8.1", + "rollup": "^3.9.0", + "@rollup/plugin-typescript": "^10.0.1", + "typescript": "^4.9.4", + "vitest": "^0.26.2", + "@typescript-eslint/eslint-plugin": "^5.47.1", + "@typescript-eslint/parser": "^5.47.1", + "eslint": "^8.30.0", + "eslint-config-prettier": "^8.5.0" + }, + "files": [ + "build", + "docs.md", + "Readme.md", + "index.d.ts" + ] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1fee059 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,20 @@ +{ + "name": "TIF22A_AnwProjekt_B", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "feiertagejs": "^1.3.9" + } + }, + "node_modules/feiertagejs": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/feiertagejs/-/feiertagejs-1.3.9.tgz", + "integrity": "sha512-tUP+WBv2OWBhPwe3NfqwCtjMq+ym598a42tfqmL0FySswEb9xs96p2iKwqqx+lxKieu1njJBRZKsFm92bJhxZw==", + "engines": { + "node": ">=8.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..aed9b08 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "feiertagejs": "^1.3.9" + } +}