parent
8339701179
commit
5c4287b79b
@ -0,0 +1,66 @@ |
|||||||
|
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(); |
Loading…
Reference in new issue