59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** | ||
|  |  * A class like API doc contains members, but these can be either properties or method. | ||
|  |  * Separate the members into two new collections: `doc.properties` and `doc.methods`. | ||
|  |  */ | ||
|  | module.exports = function processClassLikeMembers() { | ||
|  |   return { | ||
|  |     $runAfter: ['filterContainedDocs'], | ||
|  |     $runBefore: ['rendering-docs'], | ||
|  |     $process(docs) { | ||
|  |       docs.forEach(doc => { | ||
|  |         if (doc.members) { | ||
|  |           doc.properties = []; | ||
|  |           doc.methods = []; | ||
|  |           doc.members.forEach(member => { | ||
|  |             if (isMethod(member)) { | ||
|  |               doc.methods.push(member); | ||
|  |               computeMemberDescription(member); | ||
|  |             } else { | ||
|  |               doc.properties.push(member); | ||
|  | 
 | ||
|  |               if (!member.description) { | ||
|  |                 // Is this property defined as a constructor parameter e.g. `constructor(public property: string) { ... }`?
 | ||
|  |                 const constructorDoc = member.containerDoc.constructorDoc; | ||
|  |                 if (constructorDoc) { | ||
|  |                   const matchingParameterDoc = constructorDoc.parameterDocs.filter(doc => doc.declaration === member.declaration)[0]; | ||
|  |                   member.constructorParamDoc = matchingParameterDoc; | ||
|  |                 } | ||
|  |               } | ||
|  |             } | ||
|  |           }); | ||
|  |         } | ||
|  |         if (doc.statics) { | ||
|  |           doc.staticProperties = []; | ||
|  |           doc.staticMethods = []; | ||
|  |           doc.statics.forEach(member => { | ||
|  |             if (isMethod(member)) { | ||
|  |               doc.staticMethods.push(member); | ||
|  |               computeMemberDescription(member); | ||
|  |             } else { | ||
|  |               doc.staticProperties.push(member); | ||
|  |             } | ||
|  |           }); | ||
|  |         } | ||
|  | 
 | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  | }; | ||
|  | 
 | ||
|  | function isMethod(doc) { | ||
|  |   return doc.hasOwnProperty('parameters') && !doc.isGetAccessor && !doc.isSetAccessor; | ||
|  | } | ||
|  | 
 | ||
|  | function computeMemberDescription(member) { | ||
|  |   if (!member.description && member.overloads) { | ||
|  |     // Perhaps the description is on one of the overloads - take the first non-empty one
 | ||
|  |     member.description = member.overloads.map(overload => overload.description).filter(description => !!description)[0]; | ||
|  |   } | ||
|  | } |