1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
reyasume/bin/gen-resume.js

67 lines
2.1 KiB

const JSYaml = require("js-yaml");
const path = require("path");
const fsPromises = require("fs").promises;
const util = require("util");
const DATA_FOLDER = path.resolve(__dirname, "..", "_data");
const ROLE_FOLDER = path.resolve(__dirname, "..", "roles");
async function getData(basename) {
const fileContents = await fsPromises.readFile(path.resolve(DATA_FOLDER, basename + ".yaml"));
return JSYaml.safeLoad(fileContents);
}
function idList(data, ...recursive) {
const [head, ...tail] = recursive;
if (!Array.isArray(data)) {
return [];
} else if (!head) {
return data.map((it) => it.id);
} else {
return Object.fromEntries(data.map((it) => {
return [it.id, idList(it[head], ...tail)];
}))
}
}
async function generateFilterObject() {
const awardsAsync = getData("awards");
const contactAsync = getData("contact");
const educationAsync = getData("education");
const experienceAsync = getData("experience");
const skillsAsync = getData("skills");
return {
awards: idList((await awardsAsync).awards),
contacts: idList((await contactAsync).methods),
education: idList((await educationAsync).programs),
experience: Object.fromEntries(Object.entries(idList((await experienceAsync).roles, "achievements")).map(([key, items]) => {
return [key, ["description", ...items]]
})),
skills: idList((await skillsAsync).categories, "skills")
}
}
async function generateResumeTemplate(name) {
const header = {filter: await generateFilterObject()};
const filename = path.resolve(ROLE_FOLDER, name.toLowerCase().endsWith(".md") ? name : name + ".md");
await fsPromises.writeFile(filename, "---\n" + JSYaml.safeDump(header) + "\n---\n\n(Fill me in!)", {flag: "wx"});
return filename;
}
function main() {
if (process.argv.length < 3 || process.argv.length > 3) {
console.log(`Need one argument: the name of the file. But got ${process.argv.length - 2}.`);
return;
}
const name = process.argv[2];
generateResumeTemplate(name).then((filename) => {
console.log(`Successfully wrote ${filename}.`);
}).catch((err) => {
console.log(`Couldn't write template: ${err}.`);
});
}
main();