UNPKG

2.43 kBJavaScriptView Raw
1#!/usr/bin/env node
2const program = require('commander');
3const chalk = require('chalk');
4const fs = require('fs-extra');
5
6const MarkdownIt = require('markdown-it');
7const hljs = require('highlight.js');
8const namedHeadings = require('markdown-it-named-headings');
9
10var md = MarkdownIt({
11 html: true,
12 highlight: function(s, l){
13 if(l && hljs.getLanguage(l)){
14 return hljs.highlight(l, s).value;
15 }
16
17 return '';
18 }
19}).use(namedHeadings);
20
21var makeNavList = require('./lib/make-nav-list');
22var template = require('./lib/template');
23
24program
25 .option('-o, --output <output>', 'Directory for HTML output')
26 .option('-p, --pages <pages>', 'Directory of Markdown Files to be Ingested')
27 .option('-m, --meta <metadata>', 'Directory JSON Metadata')
28 .parse(process.argv);
29
30
31var rootPath = process.cwd();
32
33var outPath = program.output || `${rootPath}/public`;
34var pagesPath = program.pages || `${rootPath}/markdown`;
35var metaPath = program.meta || `${rootPath}/meta`;
36var pages = {}, pagesMeta = {};
37
38
39console.log(chalk.cyan('Loading pages...'));
40try {
41 console.log(pagesPath);
42 for(let page of fs.readdirSync(pagesPath)){
43 console.log(chalk.dim.cyan(`Loading ${page}`));
44 pages[page] = fs.readFileSync(`${pagesPath}/${page}`, 'utf-8');
45 }
46} catch(err) {
47 console.log(chalk.bold.red(`Error during loading: ${err}`));
48 process.exit(1);
49}
50
51console.log(chalk.cyan('Loading pages metadata...'));
52try {
53 for(let pageMeta of fs.readdirSync(metaPath)){
54 console.log(chalk.dim.cyan(`Loading ${pageMeta}`));
55 pagesMeta[pageMeta] = fs.readFileSync(`${metaPath}/${pageMeta}`, 'utf-8');
56 }
57} catch(err) {
58 console.log(chalk.bold.red(`Error during metadata loading: ${err}`));
59 process.exit(1);
60}
61
62console.log(chalk.green('Generating pages...'));
63try {
64 for(let page of Object.entries(pages)){
65 let pageName = page[0].slice(0, page[0].lastIndexOf('.'));
66 let metaData = pagesMeta.hasOwnProperty(`${pageName}.json`) ? JSON.parse(pagesMeta[`${pageName}.json`]) : JSON.parse(pagesMeta['defaults.json']);
67 metaData.title = metaData.title || pageName;
68
69 let pageContent = page[1];
70
71 console.log(chalk.dim.green(`Generating ${pageName}.html`));
72
73 fs.writeFileSync(`${outPath}/${pageName}.html`, template({content: { body: md.render(pageContent), nav: makeNavList(pages) }, meta: metaData}));
74 }
75} catch(err) {
76 console.log(chalk.bold.red(`Error during page generation: ${err}`));
77 process.exit(1);
78}
79
80console.log(chalk.bold.green('Done!'));