1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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);
- }
|