mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
In the API docs, concrete classes do not list the "implementation" overload on a method, since this is not strictly part of its API. We recently fixed the rendering of interfaces to display all the overloads, since there is no "implementation" overload. This commit also fixes the rendering of "pseudo-classes", which are a combination of an interface and a constant. Fixes #43001 PR Close #43734
43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
/**
|
|
* @dgProcessor processPseudoClasses
|
|
* @description
|
|
* If an API element is declared both as a `const` and an `interface` then these are both merged
|
|
* into a single `interface` document.
|
|
*
|
|
* We can identify such cases because the interface doc has one or more items in the
|
|
* `additionalDeclarations` property.
|
|
*
|
|
* This processor will convert such interface docs to class docs and ensure that the content and
|
|
* members are fixed up appropriately.
|
|
*
|
|
* Such pseudo classes should have overloaded members rendered similar to interfaces (i.e. all
|
|
* overloads are rendered whereas in classes the "implementation overload" is not rendered) we
|
|
* also mark the doc with the `isPseudoClass` property to be used in templates when rendering.
|
|
*/
|
|
module.exports = function processPseudoClasses(tsHost) {
|
|
return {
|
|
$runAfter: ['readTypeScriptModules'],
|
|
$runBefore: ['parsing-tags'],
|
|
$process(docs) {
|
|
docs.forEach(doc => {
|
|
if (doc.docType === 'interface' && doc.additionalDeclarations?.length > 0) {
|
|
doc.docType = 'class';
|
|
doc.isPseudoClass = true;
|
|
const additionalContent = tsHost.getContent(doc.additionalDeclarations[0]);
|
|
if (!doc.content || doc.content === '@publicApi' && additionalContent) {
|
|
doc.content = additionalContent;
|
|
}
|
|
doc.members = doc.members && doc.members.filter(m => {
|
|
if (m.isNewMember) {
|
|
doc.constructorDoc = m;
|
|
doc.constructorDoc.name = 'constructor';
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
};
|
|
};
|