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.
67 lines
2.1 KiB
67 lines
2.1 KiB
5 years ago
|
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();
|