123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import * as Typedoc from 'typedoc';
-
- export interface PropertyContext {
- name: string;
- type: string;
- }
-
- export interface ArgumentContext {
- name: string;
- type: string;
- }
-
- export interface MethodContext {
- name: string;
- arguments: ArgumentContext[];
- returnType: string;
- source: string;
- line: number;
- comment?: string;
- }
-
- export interface ClassContext {
- name: string;
- properties: PropertyContext[];
- methods: MethodContext[];
- }
-
- export class ClassParser {
- constructor(private sourceLinkPrefix: string) { }
-
- public parseClasses(classReflections: Typedoc.DeclarationReflection[]): ClassContext[] {
- return classReflections.map((r) => this.parseClass(r));
- }
-
- private parseClass(classReflection: Typedoc.DeclarationReflection): ClassContext {
- return {
- name: classReflection.name,
- properties: this.parseProperties(classReflection),
- methods: this.parseMethods(classReflection)
- };
- }
-
- private parseMethods(reflection: Typedoc.DeclarationReflection): MethodContext[] {
- const methodReflections = reflection.getChildrenByKind(Typedoc.ReflectionKind.Method);
- const methods = methodReflections.map((m) => this.parseMethod(m))
- .filter((m) => !m.source.includes('/node_modules/'))
- .sort((a, b) => a.line - b.line);
- return methods;
- }
-
- private parseMethod(methodReflection: Typedoc.DeclarationReflection) {
- const name = methodReflection.name;
- const line = methodReflection.sources[0].line;
- const fileName = methodReflection.sources[0].fileName;
- const source = `${this.sourceLinkPrefix}/${fileName}#L${line}`;
- const comment = methodReflection.signatures[0].comment ? methodReflection.signatures[0].comment.shortText : '';
- const args = this.parseArguments(methodReflection.signatures[0].parameters || []);
- const returnType = methodReflection.signatures[0].type.toString();
- return {
- name,
- arguments: args,
- returnType,
- source,
- line,
- comment
- };
- }
-
- private parseArguments(parameters: Typedoc.ParameterReflection[]): ArgumentContext[] {
- return parameters.map((parameter) => ({
- name: parameter.name,
- type: parameter.type.toString()
- }));
- }
-
- private parseProperties(reflection: Typedoc.DeclarationReflection): PropertyContext[] {
- const propsReflections = reflection.getChildrenByKind(Typedoc.ReflectionKind.Property);
- return propsReflections.map((propReflection) => ({
- name: propReflection.name,
- type: propReflection.type.toString()
- }));
- }
- }
|