Skip to content

Commit 450bf75

Browse files
committed
feat(api): Add properties to detail page
1 parent d75a222 commit 450bf75

File tree

6 files changed

+104
-19
lines changed

6 files changed

+104
-19
lines changed

compiler/api/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ const nestjs = new Package('nestjs', [
2020
.processor(require('./processors/processPackages'))
2121
.processor(require('./processors/generateApiListDoc'))
2222
.processor(require('./processors/extractDecoratedClasses'))
23+
.processor(require('./processors/processClassLikeMembers'))
24+
.processor(require('./processors/filterContainedDocs'))
2325
.processor(require('./processors/test'))
2426

2527
.config(function(readTypeScriptModules, tsParser) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const docTypes = [
2+
'member',
3+
'function-overload',
4+
'get-accessor-info',
5+
'set-accessor-info',
6+
'parameter'
7+
];
8+
9+
/**
10+
* Remove docs that are contained in (owned by) another doc
11+
* so that they don't get rendered as files in themselves.
12+
*/
13+
module.exports = function filterContainedDocs() {
14+
return {
15+
$runAfter: ['extra-docs-added'],
16+
$runBefore: ['computing-paths'],
17+
$process: docs =>
18+
docs.filter(doc => docTypes.indexOf(doc.docType) === -1)
19+
};
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
}

compiler/api/templates/class.template.html

+7-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
<h1>{$ doc.name $}</h1>
44
<p>{$ doc.tags.description $} </p>
55

6-
<code language="ts" hideCopy="true" linenums="false">
7-
{% if doc.isAbstract %}abstract {% endif%}class {$ doc.name $}{$ doc.typeParams | escape $}{$ memberHelper.renderHeritage(doc) $} {{$ memberHelper.renderMembers(doc) $}
6+
<pre class="language-typescript">
7+
<code class="language-typescript">
8+
{% if doc.isAbstract %}abstract {% endif%}class {$ doc.name $}{$ doc.typeParams | escape $}{$ memberHelper.renderHeritage(doc) $} {{$ memberHelper.renderMembers(doc) $}
89
}
9-
</code>
10+
</code>
11+
</pre>
12+
13+
{$ memberHelper.renderProperties(doc.properties, 'instance-properties', 'instance-property', 'Properties') $}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{% import "lib/memberHelpers.html" as memberHelpers -%}
2+
3+
{$ memberHelpers.renderProperties(doc.staticProperties, 'static-properties', 'static-property', 'Static properties') $}
4+
5+
{$ memberHelpers.renderMethodDetails(versionInfo, doc.staticMethods, 'static-methods', 'static-method', 'Static methods') $}
6+
7+
{% if doc.constructorDoc %}
8+
<h2>Constructor</h2>
9+
{$ memberHelpers.renderMethodDetail(versionInfo, doc.constructorDoc, 'constructor') $}
10+
{% endif %}
11+
12+
{$ memberHelpers.renderProperties(doc.properties, 'instance-properties', 'instance-property', 'Properties') $}
13+
14+
{$ memberHelpers.renderMethodDetails(versionInfo, doc.methods, 'instance-methods', 'instance-method', 'Methods') $}

compiler/api/templates/lib/memberHelpers.html

+2-16
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,6 @@ <h3>
9595
{% if method.shortDescription %}<tr>
9696
<td class="short-description">
9797
{$ method.shortDescription | marked $}
98-
{%- if method.see.length %}
99-
<p>See also:</p>
100-
<ul>
101-
{% for see in method.see %}
102-
<li>{$ see | marked $}</li>{% endfor %}
103-
</ul>
104-
{% endif %}
10598
</td>
10699
</tr>{% endif %}
107100
{% if method.overloads.length == 0 %}
@@ -212,15 +205,8 @@ <h2>{$ headingText $}</h2>
212205
{%- if property.isSetAccessor and not property.isGetAccessor %}<span class='write-only-property'>Write-only.</span>{% endif %}
213206
{% if property.constructorParamDoc %} <span class='from-constructor'>Declared in constructor.</span>{% endif %}
214207
{% if property.shortDescription %}{$ property.shortDescription | marked $}{% endif %}
215-
{$ (property.description or property.constructorParamDoc.description) | marked $}
216-
{%- if property.see.length %}
217-
<p>See also:</p>
218-
<ul>
219-
{% for see in property.see %}
220-
<li>{$ see | marked $}</li>{% endfor %}
221-
</ul>
222-
{% endif %}
223-
</td>
208+
{$ (property.description or property.constructorParamDoc.description) | marked $}
209+
</td>
224210
</tr>
225211
{% endfor %}
226212
</tbody>

0 commit comments

Comments
 (0)