1 | #!/usr/bin/env node
|
2 | const program = require('commander');
|
3 | const chalk = require('chalk');
|
4 | const fs = require('fs-extra');
|
5 |
|
6 | const MarkdownIt = require('markdown-it');
|
7 | const hljs = require('highlight.js');
|
8 | const namedHeadings = require('markdown-it-named-headings');
|
9 |
|
10 | var 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 |
|
21 | var makeNavList = require('./lib/make-nav-list');
|
22 | var template = require('./lib/template');
|
23 |
|
24 | program
|
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 |
|
31 | var rootPath = process.cwd();
|
32 |
|
33 | var outPath = program.output || `${rootPath}/public`;
|
34 | var pagesPath = program.pages || `${rootPath}/markdown`;
|
35 | var metaPath = program.meta || `${rootPath}/meta`;
|
36 | var pages = {}, pagesMeta = {};
|
37 |
|
38 |
|
39 | console.log(chalk.cyan('Loading pages...'));
|
40 | try {
|
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 |
|
51 | console.log(chalk.cyan('Loading pages metadata...'));
|
52 | try {
|
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 |
|
62 | console.log(chalk.green('Generating pages...'));
|
63 | try {
|
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 |
|
80 | console.log(chalk.bold.green('Done!'));
|