react-native-navigation的迁移库

MarkdownWriter.ts 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import * as Handlebars from 'handlebars';
  2. import * as fs from 'fs';
  3. import { ClassContext } from './ClassParser';
  4. export class MarkdownWriter {
  5. private classFn;
  6. private menuFn;
  7. constructor(private templatesDir: string, private outputDir: string) {
  8. this.classFn = this.setupClassHandlebars();
  9. this.menuFn = this.setupMenuHandlebars();
  10. }
  11. public writeClasses(classContexts: ClassContext[]) {
  12. classContexts.forEach((c) => {
  13. const classMarkdown = this.classFn(c);
  14. fs.writeFileSync(`${this.outputDir}/${c.name}.md`, classMarkdown, { encoding: 'utf8' });
  15. });
  16. }
  17. public writeMenu(classContexts: ClassContext[]) {
  18. const files = classContexts.map((c) => ({ name: c.name, path: `/api/${c.name}` }));
  19. const menuMarkdown = this.menuFn({ files });
  20. fs.writeFileSync(`${this.outputDir}/_sidebar.md`, menuMarkdown, { encoding: 'utf8' });
  21. fs.writeFileSync(`${this.outputDir}/README.md`, menuMarkdown, { encoding: 'utf8' });
  22. }
  23. private setupClassHandlebars() {
  24. const classTemplate = fs.readFileSync(`${this.templatesDir}/class.hbs`).toString();
  25. const methodTemplate = fs.readFileSync(`${this.templatesDir}/method.hbs`).toString();
  26. const propertyTemplate = fs.readFileSync(`${this.templatesDir}/property.hbs`).toString();
  27. Handlebars.registerPartial('class', classTemplate);
  28. Handlebars.registerPartial('method', methodTemplate);
  29. Handlebars.registerPartial('property', propertyTemplate);
  30. return Handlebars.compile('{{> class}}', { strict: true, noEscape: true });
  31. }
  32. private setupMenuHandlebars() {
  33. const template = fs.readFileSync(`${this.templatesDir}/menu.hbs`).toString();
  34. return Handlebars.compile(template, { strict: true, noEscape: true });
  35. }
  36. }