Skip to content

Commit a056413

Browse files
JeanMechethePunderWoman
authored andcommitted
docs(docs-infra): Show API decorators docs
fixes angular#66129
1 parent 33b2d99 commit a056413

6 files changed

Lines changed: 95 additions & 13 deletions

File tree

adev/shared-docs/pipeline/api-gen/rendering/entities.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,11 @@ export interface EnumEntry extends DocEntry {
126126
/** Documentation entity for an Angular decorator. */
127127
export interface DecoratorEntry extends DocEntry {
128128
decoratorType: DecoratorType;
129+
members: PropertyEntry[] | null;
129130
signatures?: {
130131
parameters: ParameterEntry[];
131132
jsdocTags: JsDocTagEntry[];
132133
}[];
133-
members: MemberEntry[];
134134
}
135135

136136
/** Documentation entity for an Angular directives and components. */

adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.mts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ export type PipeEntryRenderable = PipeEntry &
7575
members: MemberEntryRenderable[];
7676
};
7777

78-
export type DecoratorEntryRenderable = DecoratorEntry & DocEntryRenderable & HasRenderableToc;
78+
export type DecoratorEntryRenderable = Omit<DecoratorEntry, 'members'> &
79+
DocEntryRenderable &
80+
HasRenderableToc & {
81+
members: PropertyEntryRenderable[];
82+
};
7983

8084
/** Documentation entity for a TypeScript enum augmented transformed content for rendering. */
8185
export type EnumEntryRenderable = EnumEntry &
@@ -116,6 +120,10 @@ export interface MemberEntryRenderable extends MemberEntry {
116120
experimental: {version: string | undefined} | undefined;
117121
}
118122

123+
export interface PropertyEntryRenderable extends MemberEntryRenderable {
124+
type: string;
125+
}
126+
119127
/** Sub-entry for a class method augmented transformed content for rendering. */
120128
export type MethodEntryRenderable = MemberEntryRenderable &
121129
FunctionEntryRenderable & {

adev/shared-docs/pipeline/api-gen/rendering/entities/traits.mts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
* found in the LICENSE file at https://angular.dev/license
77
*/
88

9-
import {JsDocTagEntry, MemberEntry, ParameterEntry} from '../entities.mjs';
9+
import {JsDocTagEntry, MemberEntry, ParameterEntry, PropertyEntry} from '../entities.mjs';
1010

1111
import {
1212
CodeLineRenderable,
1313
JsDocTagRenderable,
1414
LinkEntryRenderable,
1515
MemberEntryRenderable,
1616
ParameterEntryRenderable,
17+
PropertyEntryRenderable,
1718
} from './renderables.mjs';
1819

1920
/** A doc entry that has jsdoc tags. */
@@ -56,6 +57,10 @@ export interface HasMembers {
5657
members: MemberEntry[];
5758
}
5859

60+
export interface HasPropertyMembers {
61+
members: PropertyEntry[];
62+
}
63+
5964
/** A doc entry that has members groups transformed for rendering. */
6065
export interface HasRenderableMembersGroups {
6166
membersGroups: Map<string, MemberEntryRenderable[]>;
@@ -66,6 +71,10 @@ export interface HasRenderableMembers {
6671
members: MemberEntryRenderable[];
6772
}
6873

74+
export interface HasRenderablePropertyMembers {
75+
members: PropertyEntryRenderable[];
76+
}
77+
6978
/** A doc entry that has an associated JS module name. */
7079
export interface HasModuleName {
7180
moduleName: string;

adev/shared-docs/pipeline/api-gen/rendering/templates/decorator-reference.tsx

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,59 @@
77
*/
88

99
import {h} from 'preact';
10+
import {DecoratorEntryRenderable, PropertyEntryRenderable} from '../entities/renderables.mjs';
11+
import {
12+
API_REFERENCE_CONTAINER,
13+
REFERENCE_MEMBER_CARD,
14+
REFERENCE_MEMBER_CARD_BODY,
15+
REFERENCE_MEMBER_CARD_HEADER,
16+
REFERENCE_MEMBER_CARD_ITEM,
17+
REFERENCE_MEMBERS,
18+
} from '../styling/css-classes.mjs';
19+
import {CodeSymbol} from './code-symbols';
1020
import {HeaderApi} from './header-api';
21+
import {RawHtml} from './raw-html';
22+
import {SectionApi} from './section-api';
1123
import {SectionDescription} from './section-description';
1224
import {SectionUsageNotes} from './section-usage-notes';
13-
import {SectionApi} from './section-api';
14-
import {API_REFERENCE_CONTAINER} from '../styling/css-classes.mjs';
15-
import {DecoratorEntryRenderable} from '../entities/renderables.mjs';
25+
26+
export const signatureCard = (
27+
name: string,
28+
member: PropertyEntryRenderable,
29+
opts: {id: string},
30+
) => {
31+
return (
32+
<div id={opts.id} class={REFERENCE_MEMBER_CARD}>
33+
<header class={REFERENCE_MEMBER_CARD_HEADER}>
34+
<h3>{name}</h3>
35+
<div>
36+
<CodeSymbol code={member.type} />
37+
</div>
38+
</header>
39+
<div class={REFERENCE_MEMBER_CARD_BODY}>
40+
<div className={`${REFERENCE_MEMBER_CARD_ITEM}`}>
41+
<p>
42+
<RawHtml value={member.htmlDescription} />
43+
</p>
44+
</div>
45+
</div>
46+
</div>
47+
);
48+
};
1649

1750
/** Component to render a decorator API reference document. */
1851
export function DecoratorReference(entry: DecoratorEntryRenderable) {
1952
return (
2053
<div className={API_REFERENCE_CONTAINER}>
2154
<HeaderApi entry={entry} />
2255
<SectionApi entry={entry} />
56+
<div className={REFERENCE_MEMBERS}>
57+
{entry.members.map((member, index) =>
58+
signatureCard(member.name, member, {
59+
id: `${member.name}_${index}`,
60+
}),
61+
)}
62+
</div>
2363
<SectionDescription entry={entry} />
2464
<SectionUsageNotes entry={entry} />
2565
</div>

adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.mts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
addHtmlUsageNotes,
1717
setEntryFlags,
1818
} from './jsdoc-transforms.mjs';
19+
import {addRenderablePropertyMembers} from './member-transforms.mjs';
1920
import {addModuleName} from './module-name.mjs';
2021
import {addRepo} from './repo.mjs';
2122

@@ -25,14 +26,24 @@ export async function getDecoratorRenderable(
2526
moduleName: string,
2627
repo: string,
2728
): Promise<DecoratorEntryRenderable> {
29+
const decoratorEntryWithMembers = {
30+
...decoratorEntry,
31+
members: decoratorEntry.members ?? [],
32+
};
33+
2834
return setEntryFlags(
2935
await addRenderableCodeToc(
30-
addHtmlAdditionalLinks(
31-
addHtmlUsageNotes(
32-
addHtmlJsDocTagComments(
33-
addHtmlDescription(addRepo(addModuleName(decoratorEntry, moduleName), repo)),
36+
await addRenderablePropertyMembers(
37+
addHtmlAdditionalLinks(
38+
addHtmlUsageNotes(
39+
addHtmlJsDocTagComments(
40+
addHtmlDescription(
41+
addRepo(addModuleName(decoratorEntryWithMembers, moduleName), repo),
42+
),
43+
),
3444
),
3545
),
46+
decoratorEntry.name,
3647
),
3748
),
3849
) as DecoratorEntryRenderable;

adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.mts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@ import {MemberEntry, MemberTags, MemberType, type DocEntry} from '../entities.mj
1010
import {isHiddenEntry} from '../entities/categorization.mjs';
1111
import type {MemberEntryRenderable} from '../entities/renderables.mjs';
1212

13-
import {HasMembers, HasModuleName, HasRenderableMembers, HasRepo} from '../entities/traits.mjs';
13+
import {
14+
HasMembers,
15+
HasModuleName,
16+
HasPropertyMembers,
17+
HasRenderableMembers,
18+
HasRenderablePropertyMembers,
19+
HasRepo,
20+
} from '../entities/traits.mjs';
1421
import {addRenderableCodeToc} from './code-transforms.mjs';
1522

1623
import {
@@ -85,8 +92,7 @@ export async function addRenderableMembers<T extends HasMembers & HasModuleName
8592
): Promise<T & HasRenderableMembers> {
8693
const members = (
8794
await Promise.all(
88-
// TODO: remove `?? []` when components repo is updated to include members array on type aliases.
89-
(entry.members ?? [])
95+
entry.members
9096
.filter((member) => !isHiddenEntry(member))
9197
.map((member) => {
9298
if (member.memberType === MemberType.Interface) {
@@ -112,3 +118,11 @@ export async function addRenderableMembers<T extends HasMembers & HasModuleName
112118
members,
113119
};
114120
}
121+
122+
export async function addRenderablePropertyMembers<
123+
T extends HasPropertyMembers & HasModuleName & HasRepo,
124+
>(entry: T, parentName: string): Promise<T & HasRenderablePropertyMembers> {
125+
return {
126+
...((await addRenderableMembers(entry, parentName)) as T & HasRenderablePropertyMembers),
127+
};
128+
}

0 commit comments

Comments
 (0)