| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | import { promises } from 'fs';import { join, dirname, parse, format } from 'path';import { parse as marked } from './lib/marked.esm.js';import { HighlightJS } from 'highlight.js';import titleize from 'titleize';const { mkdir, rm, readdir, stat, readFile, writeFile, copyFile } = promises;const { highlight, highlightAuto } = HighlightJS;const cwd = process.cwd();const inputDir = join(cwd, 'docs');const outputDir = join(cwd, 'public');const templateFile = join(inputDir, '_document.html');const isUppercase = str => /[A-Z_]+/.test(str);const getTitle = str => str === 'INDEX' ? '' : titleize(str.replace(/_/g, ' ')) + ' - ';async function init() {  console.log('Cleaning up output directory ' + outputDir);  await rm(outputDir, { force: true, recursive: true });  await mkdir(outputDir);  await copyFile(join(cwd, 'LICENSE.md'), join(inputDir, 'LICENSE.md'));  const tmpl = await readFile(templateFile, 'utf8');  console.log('Building markdown...');  await build(inputDir, tmpl);  console.log('Build complete!');}async function build(currentDir, tmpl) {  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, tmpl);    } else {      // console.log('Reading file ' + filename);      let buffer = await readFile(filename);      const parsed = parse(filename);      if (parsed.ext === '.md' && isUppercase(parsed.name)) {        const html = marked(buffer.toString('utf8'), {          highlight: (code, language) => {            if (!language) {              return highlightAuto(code).value;            }            return highlight(code, { language }).value;          }        });        buffer = Buffer.from(tmpl          .replace('<!--{{title}}-->', getTitle(parsed.name))          .replace('<!--{{content}}-->', html),        'utf8'        );        parsed.ext = '.html';        parsed.name = parsed.name.toLowerCase();        delete parsed.base;      }      parsed.dir = parsed.dir.replace(inputDir, outputDir);      const outfile = format(parsed);      // console.log('Ensure directory ' + dirname(outfile));      await mkdir(dirname(outfile), { recursive: true });      console.log('Writing file ' + outfile);      await writeFile(outfile, buffer, { mode });    }  }}init().catch(console.error);
 |