Browse Source

docs support enum generationg

Daniel Zlotin 6 years ago
parent
commit
6e45d79192

+ 11
- 0
docs/api/LayoutType.md View File

1
+# LayoutType
2
+
3
+- BottomTabs
4
+- Component
5
+- ExternalComponent
6
+- SideMenuCenter
7
+- SideMenuLeft
8
+- SideMenuRight
9
+- SideMenuRoot
10
+- Stack
11
+- TopTabs

+ 1
- 0
docs/api/README.md View File

14
 - [CommandsObserver](/api/CommandsObserver)
14
 - [CommandsObserver](/api/CommandsObserver)
15
 - [ComponentEventsObserver](/api/ComponentEventsObserver)
15
 - [ComponentEventsObserver](/api/ComponentEventsObserver)
16
 - [EventsRegistry](/api/EventsRegistry)
16
 - [EventsRegistry](/api/EventsRegistry)
17
+- [LayoutType](/api/LayoutType)

+ 1
- 0
docs/api/_sidebar.md View File

14
 - [CommandsObserver](/api/CommandsObserver)
14
 - [CommandsObserver](/api/CommandsObserver)
15
 - [ComponentEventsObserver](/api/ComponentEventsObserver)
15
 - [ComponentEventsObserver](/api/ComponentEventsObserver)
16
 - [EventsRegistry](/api/EventsRegistry)
16
 - [EventsRegistry](/api/EventsRegistry)
17
+- [LayoutType](/api/LayoutType)

+ 8
- 4
scripts/gen-docs/ClassParser.ts View File

28
 export class ClassParser {
28
 export class ClassParser {
29
   constructor(private sourceLinkPrefix: string) { }
29
   constructor(private sourceLinkPrefix: string) { }
30
 
30
 
31
-  public parseClass(reflection: Typedoc.DeclarationReflection): ClassContext {
31
+  public parseClasses(classReflections: Typedoc.DeclarationReflection[]): ClassContext[] {
32
+    return classReflections.map((r) => this.parseClass(r));
33
+  }
34
+
35
+  private parseClass(classReflection: Typedoc.DeclarationReflection): ClassContext {
32
     return {
36
     return {
33
-      name: reflection.name,
34
-      properties: this.parseProperties(reflection),
35
-      methods: this.parseMethods(reflection)
37
+      name: classReflection.name,
38
+      properties: this.parseProperties(classReflection),
39
+      methods: this.parseMethods(classReflection)
36
     };
40
     };
37
   }
41
   }
38
 
42
 

+ 19
- 0
scripts/gen-docs/EnumParser.ts View File

1
+import { DeclarationReflection, ReflectionKind } from 'typedoc';
2
+
3
+export interface EnumContext {
4
+  name: string;
5
+  values: string[];
6
+}
7
+
8
+export class EnumParser {
9
+  public parse(enumReflections: DeclarationReflection[]): EnumContext[] {
10
+    return enumReflections.map((r) => this.parseEnum(r));
11
+  }
12
+
13
+  private parseEnum(enumReflection: DeclarationReflection): EnumContext {
14
+    return {
15
+      name: enumReflection.name,
16
+      values: enumReflection.getChildrenByKind(ReflectionKind.EnumMember).map((child) => child.name)
17
+    };
18
+  }
19
+}

+ 5
- 2
scripts/gen-docs/Main.ts View File

3
 import { ClassParser } from './ClassParser';
3
 import { ClassParser } from './ClassParser';
4
 import { MarkdownWriter } from './MarkdownWriter';
4
 import { MarkdownWriter } from './MarkdownWriter';
5
 import { ReflectionKind } from 'typedoc';
5
 import { ReflectionKind } from 'typedoc';
6
+import { EnumParser } from './EnumParser';
6
 
7
 
7
 const INPUT_DIR = `${__dirname}/../../lib/src`;
8
 const INPUT_DIR = `${__dirname}/../../lib/src`;
8
 const OUTPUT_DIR = `${__dirname}/../../docs/api`;
9
 const OUTPUT_DIR = `${__dirname}/../../docs/api`;
16
     const markdownWriter = new MarkdownWriter(TEMPLATES_DIR, OUTPUT_DIR);
17
     const markdownWriter = new MarkdownWriter(TEMPLATES_DIR, OUTPUT_DIR);
17
     const reflections = new ReflectionsReader(TSCONFIG_PATH).read(INPUT_DIR);
18
     const reflections = new ReflectionsReader(TSCONFIG_PATH).read(INPUT_DIR);
18
 
19
 
19
-    const parsedClasses = reflections.classReflections.map((c) => classParser.parseClass(c));
20
+    const parsedClasses = classParser.parseClasses(reflections.classReflections);
21
+    const parsedEnums = new EnumParser().parse(reflections.enumReflections);
20
     markdownWriter.writeClasses(parsedClasses);
22
     markdownWriter.writeClasses(parsedClasses);
21
-    markdownWriter.writeMenu(parsedClasses);
23
+    markdownWriter.writeEnums(parsedEnums);
24
+    markdownWriter.writeMenu(parsedClasses, parsedEnums);
22
   }
25
   }
23
 }
26
 }
24
 
27
 

+ 21
- 4
scripts/gen-docs/MarkdownWriter.ts View File

1
+import * as _ from 'lodash';
1
 import * as Handlebars from 'handlebars';
2
 import * as Handlebars from 'handlebars';
2
 import * as fs from 'fs';
3
 import * as fs from 'fs';
3
 import { ClassContext } from './ClassParser';
4
 import { ClassContext } from './ClassParser';
5
+import { EnumContext } from './EnumParser';
4
 
6
 
5
 export class MarkdownWriter {
7
 export class MarkdownWriter {
6
   private classFn;
8
   private classFn;
9
+  private enumFn;
7
   private menuFn;
10
   private menuFn;
8
   constructor(private templatesDir: string, private outputDir: string) {
11
   constructor(private templatesDir: string, private outputDir: string) {
9
     this.classFn = this.setupClassHandlebars();
12
     this.classFn = this.setupClassHandlebars();
13
+    this.enumFn = this.setupEnumHandlebars();
10
     this.menuFn = this.setupMenuHandlebars();
14
     this.menuFn = this.setupMenuHandlebars();
11
   }
15
   }
12
 
16
 
13
   public writeClasses(classContexts: ClassContext[]) {
17
   public writeClasses(classContexts: ClassContext[]) {
14
     classContexts.forEach((c) => {
18
     classContexts.forEach((c) => {
15
-      const classMarkdown = this.classFn(c);
16
-      fs.writeFileSync(`${this.outputDir}/${c.name}.md`, classMarkdown, { encoding: 'utf8' });
19
+      const markdown = this.classFn(c);
20
+      fs.writeFileSync(`${this.outputDir}/${c.name}.md`, markdown, { encoding: 'utf8' });
17
     });
21
     });
18
   }
22
   }
19
 
23
 
20
-  public writeMenu(classContexts: ClassContext[]) {
24
+  public writeEnums(enumContexts: EnumContext[]) {
25
+    enumContexts.forEach((c) => {
26
+      const markdown = this.enumFn(c);
27
+      fs.writeFileSync(`${this.outputDir}/${c.name}.md`, markdown, { encoding: 'utf8' });
28
+    });
29
+  }
30
+
31
+  public writeMenu(classContexts: ClassContext[], enumContexts: EnumContext[]) {
21
     const files = classContexts.map((c) => ({ name: c.name, path: `/api/${c.name}` }));
32
     const files = classContexts.map((c) => ({ name: c.name, path: `/api/${c.name}` }));
22
-    const menuMarkdown = this.menuFn({ files });
33
+    const files2 = enumContexts.map((c) => ({ name: c.name, path: `/api/${c.name}` }));
34
+    const menuMarkdown = this.menuFn({ files: _.concat(files, files2) });
23
     fs.writeFileSync(`${this.outputDir}/_sidebar.md`, menuMarkdown, { encoding: 'utf8' });
35
     fs.writeFileSync(`${this.outputDir}/_sidebar.md`, menuMarkdown, { encoding: 'utf8' });
24
     fs.writeFileSync(`${this.outputDir}/README.md`, menuMarkdown, { encoding: 'utf8' });
36
     fs.writeFileSync(`${this.outputDir}/README.md`, menuMarkdown, { encoding: 'utf8' });
25
   }
37
   }
36
     return Handlebars.compile('{{> class}}', { strict: true, noEscape: true });
48
     return Handlebars.compile('{{> class}}', { strict: true, noEscape: true });
37
   }
49
   }
38
 
50
 
51
+  private setupEnumHandlebars() {
52
+    const enumTemplate = fs.readFileSync(`${this.templatesDir}/enum.hbs`).toString();
53
+    return Handlebars.compile(enumTemplate, { strict: true, noEscape: true });
54
+  }
55
+
39
   private setupMenuHandlebars() {
56
   private setupMenuHandlebars() {
40
     const template = fs.readFileSync(`${this.templatesDir}/menu.hbs`).toString();
57
     const template = fs.readFileSync(`${this.templatesDir}/menu.hbs`).toString();
41
     return Handlebars.compile(template, { strict: true, noEscape: true });
58
     return Handlebars.compile(template, { strict: true, noEscape: true });

+ 8
- 5
scripts/gen-docs/ReflectionsReader.ts View File

13
 
13
 
14
 export interface Reflections {
14
 export interface Reflections {
15
   classReflections: DeclarationReflection[];
15
   classReflections: DeclarationReflection[];
16
+  enumReflections: DeclarationReflection[];
16
 }
17
 }
17
 
18
 
18
 export class ReflectionsReader {
19
 export class ReflectionsReader {
30
     // console.log(JSON.stringify(this.typedocApp.serializer.projectToObject(projectReflection)));
31
     // console.log(JSON.stringify(this.typedocApp.serializer.projectToObject(projectReflection)));
31
 
32
 
32
     const externalModules = this.externalModulesWithoutTestsAndMocks(projectReflection);
33
     const externalModules = this.externalModulesWithoutTestsAndMocks(projectReflection);
33
-    const classReflections = this.classReflections(externalModules);
34
+    const classReflections = this.reflections(externalModules, ReflectionKind.Class);
35
+    const enumReflections = this.reflections(externalModules, ReflectionKind.Enum);
34
 
36
 
35
     return {
37
     return {
36
-      classReflections
38
+      classReflections,
39
+      enumReflections
37
     };
40
     };
38
   }
41
   }
39
 
42
 
42
       .filter((m) => !m.name.endsWith('.mock"') && !m.name.endsWith('.test"'));
45
       .filter((m) => !m.name.endsWith('.mock"') && !m.name.endsWith('.test"'));
43
   }
46
   }
44
 
47
 
45
-  private classReflections(externalModules: DeclarationReflection[]): DeclarationReflection[] {
46
-    return externalModules.filter((m) => m.getChildrenByKind(ReflectionKind.Class).length === 1)
47
-      .map((m) => m.getChildrenByKind(ReflectionKind.Class)[0]);
48
+  private reflections(externalModules: DeclarationReflection[], kind: ReflectionKind): DeclarationReflection[] {
49
+    return externalModules.filter((m) => m.getChildrenByKind(kind).length === 1)
50
+      .map((m) => m.getChildrenByKind(kind)[0]);
48
   }
51
   }
49
 }
52
 }

+ 5
- 0
scripts/gen-docs/templates/enum.hbs View File

1
+# {{name}}
2
+
3
+{{#each values}}
4
+- {{this}}
5
+{{/each}}