@tim117/aoc-schedule
Version:
Schedule maker for advent of code.
51 lines • 4.48 kB
JavaScript
import yargs from 'yargs';
import { appendFile, writeFile } from 'fs/promises';
import { oraPromise } from 'ora';
import { resolve } from 'path';
async function getArgs() {
const { languages, filePath } = await yargs(process.argv.slice(2))
.usage('$0 -l typescript go rust c++ -f schedule.txt')
.epilogue('create-advent-schedule creates a randomized schedule for Advent of Code based on the languages that were given to the cli and outputs it to the specified --file-path.')
.help()
.string('file-path')
.describe('file-path', 'The path to output the schedule.')
.alias('file-path', 'f')
.array('languages')
.describe('languages', 'The languages to include in your Advent of Code schedule.')
.alias('languages', 'l').argv;
return {
languages: languages?.map((val) => val.toString()) ?? ['typescript'],
filePath: filePath ?? 'schedule.txt'
};
}
function makeSchedule(languages) {
const schedule = {};
for (let i = 1; i < 26; ++i) {
const todaysLanguage = getRandomValue(languages);
schedule[i] = todaysLanguage;
}
return schedule;
}
function getRandomValue(list) {
const length = list.length;
const index = Math.floor(Math.random() * length);
return list[index];
}
async function writeSchedule({ outputPath, schedule }) {
await writeFile(outputPath, '');
for (const key in schedule) {
await appendFile(outputPath, `Dec ${key}\t\t${schedule[key]}\n`);
}
}
async function main() {
const { languages, filePath } = await getArgs();
const schedule = makeSchedule(languages);
oraPromise(writeSchedule({ outputPath: filePath, schedule }), {
text: 'Creating schedule',
successText: `Schedule was successfully created at ${resolve(filePath)}.`,
failText: 'Unable to create schedule.'
});
}
main();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsS0FBSyxVQUFVLE9BQU87SUFDcEIsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRCxLQUFLLENBQUMsOENBQThDLENBQUM7U0FDckQsUUFBUSxDQUNQLHdLQUF3SyxDQUN6SztTQUNBLElBQUksRUFBRTtTQUNOLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDbkIsUUFBUSxDQUFDLFdBQVcsRUFBRSxrQ0FBa0MsQ0FBQztTQUN6RCxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztTQUN2QixLQUFLLENBQUMsV0FBVyxDQUFDO1NBQ2xCLFFBQVEsQ0FDUCxXQUFXLEVBQ1gsMkRBQTJELENBQzVEO1NBQ0EsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEMsT0FBTztRQUNMLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNwRSxRQUFRLEVBQUUsUUFBUSxJQUFJLGNBQWM7S0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxTQUFtQjtJQUN2QyxNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDM0IsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUM7S0FDOUI7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUksSUFBUztJQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLENBQUM7QUFNRCxLQUFLLFVBQVUsYUFBYSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBd0I7SUFDekUsTUFBTSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFO1FBQzFCLE1BQU0sVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLEdBQUcsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xFO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxPQUFPLEVBQUUsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtRQUM1RCxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLFdBQVcsRUFBRSx3Q0FBd0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO1FBQ3pFLFFBQVEsRUFBRSw0QkFBNEI7S0FDdkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDIn0=