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];
|
|
}
|
|
} |