63 lines
1.5 KiB
JavaScript
Vendored
63 lines
1.5 KiB
JavaScript
Vendored
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
const folder = process.argv[2];
|
|
const jsonFile = process.argv[3];
|
|
|
|
if (!folder || !jsonFile) {
|
|
console.log('node ./json-to-files.js {path to folder} {path to json file}');
|
|
process.exit(1);
|
|
}
|
|
|
|
const specs = require(jsonFile);
|
|
|
|
const files = specs.reduce((obj, spec) => {
|
|
if (!obj[spec.section]) {
|
|
obj[spec.section] = {
|
|
md: [],
|
|
html: [],
|
|
options: {}
|
|
};
|
|
}
|
|
|
|
obj[spec.section].md.push(spec.markdown);
|
|
obj[spec.section].html.push(spec.html);
|
|
Object.assign(obj[spec.section].options, spec.options);
|
|
|
|
return obj;
|
|
}, {});
|
|
|
|
try {
|
|
fs.mkdirSync(folder, {recursive: true});
|
|
} catch (ex) {
|
|
// already exists
|
|
}
|
|
|
|
for (const section in files) {
|
|
const file = files[section];
|
|
const name = section.toLowerCase().replace(' ', '_');
|
|
const frontMatter = Object.keys(file.options).map(opt => {
|
|
let value = file.options[opt];
|
|
if (typeof value !== 'string') {
|
|
value = JSON.stringify(value);
|
|
}
|
|
return `${opt}: ${value}`;
|
|
}).join('\n');
|
|
|
|
let markdown = file.md.join('\n\n');
|
|
if (frontMatter) {
|
|
markdown = `---\n${frontMatter}\n---\n\n${markdown}`;
|
|
}
|
|
const html = file.html.join('\n\n');
|
|
|
|
const mdFile = path.resolve(folder, `${name}.md`);
|
|
const htmlFile = path.resolve(folder, `${name}.html`);
|
|
|
|
if (fs.existsSync(mdFile) || fs.existsSync(htmlFile)) {
|
|
throw new Error(`${name} already exists.`);
|
|
}
|
|
|
|
fs.writeFileSync(mdFile, markdown);
|
|
fs.writeFileSync(htmlFile, html);
|
|
}
|