Created
January 21, 2022 16:52
-
-
Save htammen/f62bf2951e5ca6cf45254df40909670f to your computer and use it in GitHub Desktop.
Returns holidays for a year, country and state. Many countries are supported
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import dateHolidays from 'https://cdn.skypack.dev/date-holidays'; | |
import { ld } from 'https://x.nest.land/[email protected]/mod.ts' | |
import { parse } from "https://deno.land/std/flags/mod.ts" | |
/** | |
* returns a command line argument by name from the args array | |
*/ | |
const getArg = function(argName: string, args: any[]): string { | |
//@ts-ignore | |
const arg = ld.find(args, (arg: string[]) => arg[0] === argName) | |
return arg ? arg[1]: null | |
} | |
/** | |
* Helper method that logs a msg if debug flag is set | |
*/ | |
const logDebug=function(msg: any) { | |
if(bDebug) { | |
console.log(msg) | |
} | |
} | |
// parse the args array into an array of 2-dimensionals array. | |
// Each array element is an array with 2 members: 0-argument, 1-argument value | |
const args = ld.toPairs(parse(Deno.args)) | |
//console.log(args) | |
// save the command line parameters in variables. | |
const bHelp = getArg('help', args) | |
const bDebug = getArg('debug', args) | |
const year = getArg('year', args) || getArg('_', args)[0] || new Date().getFullYear() | |
const country = getArg('country', args) || getArg('_', args)[1] || "DE" | |
const state = getArg('state', args) || getArg('_', args)[2] || "NI" | |
const bCountries = getArg('countries', args) | |
const bStates = getArg('states', args) | |
const bQuery = getArg('query', args) | |
logDebug(args) | |
logDebug(year) | |
class HolidayViewer { | |
private hd: dateHolidays | |
constructor() { | |
this.hd = new dateHolidays(country, state, null, null); | |
} | |
processInput() { | |
if(bCountries) { | |
this.showCountries() | |
} else if(bStates) { | |
this.showStates() | |
} else if(bQuery) { | |
this.showQueryResults() | |
} else { | |
this.showHolidays() | |
} | |
} | |
showQueryResults() { | |
let queryResult = this.hd.query(country) | |
console.log(queryResult) | |
} | |
showCountries() { | |
let countries = this.hd.getCountries() | |
console.log(countries) | |
} | |
showStates() { | |
let states = this.hd.getStates(country) | |
console.log(states); | |
} | |
showHolidays() { | |
let holidays:Array<any> = this.hd.getHolidays(year, "de"); | |
let publics:Array<{date:string, name:string}> = holidays.filter(holiday => {return holiday.type === "public"}) | |
.map(entry => {return {date: entry.date, name: entry.name}}); | |
console.log(JSON.stringify(publics)); | |
// Deno.stdout.writeSync(new TextEncoder().encode(JSON.stringify(publics))); | |
} | |
} | |
if(bHelp) { | |
console.log('Usage: holidays <year country state> [options]') | |
console.log('Usage: hoidays [options]') | |
console.log(` | |
Returns the holidays for a year, country and state. | |
ex: holidays 2022 DE NI -> this returns the holidays for lower saxony in germany | |
Options | |
--year: year for which to show the holidays | |
--country: country for which you want to see the date-holidays. Get a list of countries with holidays --countries | |
--countries: get a list of supported countries | |
--states: get a list of available states for a country. Needs --country to be set. Get a list of states with e.g. holidays --states --country DE | |
--state: state of the country for which you want to see the holidays | |
--help: show this help screen | |
--debug: show debug information | |
`) | |
Deno.exit(0); | |
} | |
new HolidayViewer().processInput(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment