50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
|
const { mkdir, rmdir, readdir, stat, readFile, writeFile } = require('fs').promises;
|
||
|
const { join, dirname } = require('path');
|
||
|
const marked = require('./');
|
||
|
const { highlight, highlightAuto } = require('highlight.js');
|
||
|
const cwd = process.cwd();
|
||
|
const inputDir = join(cwd, 'docs');
|
||
|
const outputDir = join(cwd, 'public');
|
||
|
|
||
|
async function init() {
|
||
|
console.log('Cleaning up output directory ' + outputDir);
|
||
|
await rmdir(outputDir, { recursive: true });
|
||
|
await mkdir(outputDir);
|
||
|
console.log('Building markdown...');
|
||
|
await build(inputDir);
|
||
|
console.log('Build complete!');
|
||
|
}
|
||
|
|
||
|
async function build(currentDir) {
|
||
|
const files = await readdir(currentDir);
|
||
|
for (const file of files) {
|
||
|
const filename = join(currentDir, file);
|
||
|
const stats = await stat(filename);
|
||
|
const { mode } = stats;
|
||
|
if (stats.isDirectory()) {
|
||
|
//console.log('Found directory ' + filename);
|
||
|
await build(filename);
|
||
|
} else {
|
||
|
//console.log('Reading file ' + filename);
|
||
|
let contents = await readFile(filename, 'utf8');
|
||
|
if (file.endsWith('.md')) {
|
||
|
contents = marked(contents, {
|
||
|
highlight: (code, lang) => {
|
||
|
if (!lang) {
|
||
|
return highlightAuto(code).value;
|
||
|
}
|
||
|
return highlight(lang, code).value;
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
const outfile = filename.replace(inputDir, outputDir).replace('.md', '.html').toLowerCase();
|
||
|
//console.log('Ensure directory ' + dirname(outfile));
|
||
|
await mkdir(dirname(outfile), { recursive: true });
|
||
|
//console.log('Writing file ' + outfile);
|
||
|
await writeFile(outfile, contents, { mode });
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
init().catch(console.error);
|