Skip to content

Commit

Permalink
add json-to-file.js
Browse files Browse the repository at this point in the history
  • Loading branch information
UziTech committed Mar 12, 2019
1 parent 895d3ea commit 6e84f7a
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions test/json-to-files.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
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);
}

0 comments on commit 6e84f7a

Please sign in to comment.