1
+ /**
2
+ * A class like API doc contains members, but these can be either properties or method.
3
+ * Separate the members into two new collections: `doc.properties` and `doc.methods`.
4
+ */
5
+ module . exports = function processClassLikeMembers ( ) {
6
+ return {
7
+ $runAfter : [ 'filterContainedDocs' ] ,
8
+ $runBefore : [ 'rendering-docs' ] ,
9
+ $process ( docs ) {
10
+ docs . forEach ( doc => {
11
+ if ( doc . members ) {
12
+ doc . properties = [ ] ;
13
+ doc . methods = [ ] ;
14
+ doc . members . forEach ( member => {
15
+ if ( isMethod ( member ) ) {
16
+ doc . methods . push ( member ) ;
17
+ computeMemberDescription ( member ) ;
18
+ } else {
19
+ doc . properties . push ( member ) ;
20
+
21
+ if ( ! member . description ) {
22
+ // Is this property defined as a constructor parameter e.g. `constructor(public property: string) { ... }`?
23
+ const constructorDoc = member . containerDoc . constructorDoc ;
24
+ if ( constructorDoc ) {
25
+ const matchingParameterDoc = constructorDoc . parameterDocs . filter ( doc => doc . declaration === member . declaration ) [ 0 ] ;
26
+ member . constructorParamDoc = matchingParameterDoc ;
27
+ }
28
+ }
29
+ }
30
+ } ) ;
31
+ }
32
+ if ( doc . statics ) {
33
+ doc . staticProperties = [ ] ;
34
+ doc . staticMethods = [ ] ;
35
+ doc . statics . forEach ( member => {
36
+ if ( isMethod ( member ) ) {
37
+ doc . staticMethods . push ( member ) ;
38
+ computeMemberDescription ( member ) ;
39
+ } else {
40
+ doc . staticProperties . push ( member ) ;
41
+ }
42
+ } ) ;
43
+ }
44
+
45
+ } ) ;
46
+ }
47
+ } ;
48
+ } ;
49
+
50
+ function isMethod ( doc ) {
51
+ return doc . hasOwnProperty ( 'parameters' ) && ! doc . isGetAccessor && ! doc . isSetAccessor ;
52
+ }
53
+
54
+ function computeMemberDescription ( member ) {
55
+ if ( ! member . description && member . overloads ) {
56
+ // Perhaps the description is on one of the overloads - take the first non-empty one
57
+ member . description = member . overloads . map ( overload => overload . description ) . filter ( description => ! ! description ) [ 0 ] ;
58
+ }
59
+ }
0 commit comments