UNPKG

2.26 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');
8
9var 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
19var template = require('./lib/template');
20
21program
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
28var rootPath = process.cwd();
29
30var outPath = program.output || `${rootPath}/public`;
31var pagesPath = program.pages || `${rootPath}/markdown`;
32var metaPath = program.meta || `${rootPath}/meta`;
33var pages = {}, pagesMeta = {};
34
35
36console.log(chalk.cyan('Loading pages...'));
37try {
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
48console.log(chalk.cyan('Loading pages metadata...'));
49try {
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
59console.log(chalk.green('Generating pages...'));
60try {
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
77console.log(chalk.bold.green('Done!'));