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