| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | import * as Handlebars from 'handlebars';
import * as fs from 'fs';
import { ClassContext } from './ClassParser';
export class MarkdownWriter {
  private classFn;
  private menuFn;
  constructor(private templatesDir: string, private outputDir: string) {
    this.classFn = this.setupClassHandlebars();
    this.menuFn = this.setupMenuHandlebars();
  }
  public writeClasses(classContexts: ClassContext[]) {
    classContexts.forEach((c) => {
      const classMarkdown = this.classFn(c);
      fs.writeFileSync(`${this.outputDir}/${c.name}.md`, classMarkdown, { encoding: 'utf8' });
    });
  }
  public writeMenu(classContexts: ClassContext[]) {
    const menuMarkdown = this.menuFn({
      classes: classContexts.map((c) => ({ name: c.name, path: `/api/${c.name}` }))
    });
    fs.writeFileSync(`${this.outputDir}/_sidebar.md`, menuMarkdown, { encoding: 'utf8' });
    fs.writeFileSync(`${this.outputDir}/README.md`, menuMarkdown, { encoding: 'utf8' });
  }
  private setupClassHandlebars() {
    const classTemplate = fs.readFileSync(`${this.templatesDir}/class.hbs`).toString();
    const methodTemplate = fs.readFileSync(`${this.templatesDir}/method.hbs`).toString();
    const propertyTemplate = fs.readFileSync(`${this.templatesDir}/property.hbs`).toString();
    Handlebars.registerPartial('class', classTemplate);
    Handlebars.registerPartial('method', methodTemplate);
    Handlebars.registerPartial('property', propertyTemplate);
    return Handlebars.compile('{{> class}}', { strict: true, noEscape: true });
  }
  private setupMenuHandlebars() {
    const template = fs.readFileSync(`${this.templatesDir}/menu.hbs`).toString();
    return Handlebars.compile(template, { strict: true, noEscape: true });
  }
}
 |