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