const fs = require("fs-extra"); const path = require("path"); const chalk = require("chalk"); const util = require("./util.js"); const markdown = require("markdown-builder"); const snippets = require("../data/snippet_data.json") const { headers, misc, lists } = markdown; const TAG_NAMES = [...new Set(snippets.reduce((acc,v) => [...acc,v.tags[0]],[]))].sort((a,b) => a.localeCompare(b)); console.log(TAG_NAMES); const STATIC_PARTS_PATH = "./static-parts"; let startPart = ""; let endPart = ""; let output = ""; const detailsTOC = (title, snippetsArray) => `\n${misc .collapsible( title, lists .ul(snippetsArray, snippet => misc.link( snippet.title .replace("\n", "") .split("```")[0] .trim(), misc.anchor( snippet.title .replace("\n", "") .split("```")[0] .trim() ) ) ) .trim() ) .trim()}\n\n`; console.time("Builder"); try { startPart = fs.readFileSync( path.join(STATIC_PARTS_PATH, "README-start.md"), "utf8" ); endPart = fs.readFileSync( path.join(STATIC_PARTS_PATH, "README-end.md"), "utf8" ); } catch (err) { console.log(`${chalk.red("ERROR!")} During static part loading: ${err}`); process.exit(1); } try { // add static part for start output += `${startPart}\n`; const snippetsInTag = {}; TAG_NAMES.forEach(tag => snippetsInTag[tag] = snippets.filter(v => v.tags[0] == tag)); // write Table of Contents TAG_NAMES.forEach(tag => { const taggedSnippets = snippetsInTag[tag]; output += headers.h3(util.capitalize(tag)); output += detailsTOC("View contents", taggedSnippets); }); // delimeter after TOC output += misc.hr(); // write actual snippets TAG_NAMES.forEach(tag => { output += headers.h2(util.capitalize(tag)); const taggedSnippets = snippetsInTag[tag]; taggedSnippets.forEach(snippet => { output += headers.h3(snippet.title).trim(); output += `\n\n${snippet.text}${snippet.codeBlocks.slice(0,-1).join('\n\n')}`; if (snippet.notes && snippet.notes.length) { output += headers.h4('Notes'); output += `\n${snippet.notes}`; } output += misc.collapsible('Examples', snippet.codeBlocks.slice(-1)); output += `\n
${misc.link( "⬆ Back to top", misc.anchor("Table of Contents") )}\n\n` }) }); // add static part for end output += `\n${endPart}\n`; fs.writeFileSync("README.md", output); } catch (err) { console.log(`${chalk.red("ERROR!")} During README generation: ${err}`); process.exit(1); } console.log(`${chalk.green("SUCCESS!")} README file generated!`); console.timeEnd("Builder");