Skip to content

Commit 974b246

Browse files
mmalerbaAndrewKushnir
authored andcommitted
docs: update rendering to use generated repo link (angular#61143)
PR Close angular#61143
1 parent 5765905 commit 974b246

24 files changed

+141
-63
lines changed

adev/shared-docs/pipeline/api-gen/extraction/test/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ extract_api_to_json(
1616
module_name = "@angular/core",
1717
output_name = "api.json",
1818
private_modules = [""],
19+
repo = "angular/angular",
1920
)
2021

2122
extract_api_to_json(
@@ -34,6 +35,7 @@ extract_api_to_json(
3435
module_name = "@angular/core",
3536
output_name = "extra_api.json",
3637
private_modules = [""],
38+
repo = "angular/angular",
3739
)
3840

3941
filegroup(

adev/shared-docs/pipeline/api-gen/manifest/test/BUILD.bazel

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
load("//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest.bzl", "generate_api_manifest")
21
load("//adev/shared-docs/pipeline/api-gen/extraction:extract_api_to_json.bzl", "extract_api_to_json")
2+
load("//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest.bzl", "generate_api_manifest")
33
load("//tools:defaults.bzl", "jasmine_node_test", "ts_library")
44

55
generate_api_manifest(
@@ -17,6 +17,7 @@ extract_api_to_json(
1717
module_name = "@angular/router",
1818
output_name = "api.json",
1919
private_modules = [""],
20+
repo = "angular/angular",
2021
)
2122

2223
ts_library(

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export interface JsDocTagRenderable extends JsDocTagEntry {
3333

3434
/** A documentation entry augmented with transformed content for rendering. */
3535
export interface DocEntryRenderable extends DocEntry {
36+
repo: string;
3637
moduleName: string;
3738
htmlDescription: string;
3839
shortHtmlDescription: string;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ export interface HasModuleName {
7171
moduleName: string;
7272
}
7373

74+
/** A doc entry that has an associated github repo. */
75+
export interface HasRepo {
76+
repo: string;
77+
}
78+
7479
/** A doc entry that has ToC transformed for rendering. */
7580
export interface HasRenderableToc {
7681
beforeCodeGroups: string;

adev/shared-docs/pipeline/api-gen/rendering/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {setCurrentSymbol, setSymbols} from './symbol-context';
1919

2020
/** The JSON data file format for extracted API reference info. */
2121
interface EntryCollection {
22+
repo: string;
2223
moduleName: string;
2324
moduleLabel?: string;
2425
normalizedModuleName: string;
@@ -44,13 +45,15 @@ function parseEntryData(srcs: string[]): EntryCollection[] {
4445
const command = fileContentJson as CliCommand;
4546
return [
4647
{
48+
repo: 'anglar/cli',
4749
moduleName: 'unknown',
4850
normalizedModuleName: 'unknown',
4951
entries: [fileContentJson as DocEntry],
5052
symbols: new Map(),
5153
},
5254
...command.subcommands!.map((subCommand) => {
5355
return {
56+
repo: 'angular/cli',
5457
moduleName: 'unknown',
5558
normalizedModuleName: 'unknown',
5659
entries: [{...subCommand, parentCommand: command} as any],
@@ -61,6 +64,7 @@ function parseEntryData(srcs: string[]): EntryCollection[] {
6164
}
6265

6366
return {
67+
repo: 'unknown',
6468
moduleName: 'unknown',
6569
normalizedModuleName: 'unknown',
6670
entries: [fileContentJson as DocEntry], // TODO: fix the typing cli entries aren't DocEntry
@@ -122,7 +126,7 @@ async function main() {
122126

123127
const renderableEntries = extractedEntries.map((entry) => {
124128
setCurrentSymbol(entry.name);
125-
return getRenderable(entry, collection.moduleName);
129+
return getRenderable(entry, collection.moduleName, collection.repo);
126130
});
127131

128132
const htmlOutputs = renderableEntries.map(renderEntry);

adev/shared-docs/pipeline/api-gen/rendering/processing.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import {DocEntry} from './entities';
1010

11+
import {CliCommand} from './cli-entities';
1112
import {
1213
isClassEntry,
1314
isCliEntry,
@@ -21,9 +22,9 @@ import {
2122
} from './entities/categorization';
2223
import {CliCommandRenderable, DocEntryRenderable} from './entities/renderables';
2324
import {getClassRenderable} from './transforms/class-transforms';
24-
import {getDecoratorRenderable} from './transforms/decorator-transforms';
2525
import {getCliRenderable} from './transforms/cli-transforms';
2626
import {getConstantRenderable} from './transforms/constant-transforms';
27+
import {getDecoratorRenderable} from './transforms/decorator-transforms';
2728
import {getEnumRenderable} from './transforms/enum-transforms';
2829
import {getFunctionRenderable} from './transforms/function-transforms';
2930
import {getInitializerApiFunctionRenderable} from './transforms/initializer-api-functions-transform';
@@ -36,47 +37,48 @@ import {
3637
setEntryFlags,
3738
} from './transforms/jsdoc-transforms';
3839
import {addModuleName} from './transforms/module-name';
40+
import {addRepo} from './transforms/repo';
3941
import {getTypeAliasRenderable} from './transforms/type-alias-transforms';
40-
import {CliCommand} from './cli-entities';
4142

4243
export function getRenderable(
4344
entry: DocEntry | CliCommand,
4445
moduleName: string,
46+
repo: string,
4547
): DocEntryRenderable | CliCommandRenderable {
4648
if (isCliEntry(entry)) {
4749
return getCliRenderable(entry);
4850
}
4951

5052
if (isClassEntry(entry)) {
51-
return getClassRenderable(entry, moduleName);
53+
return getClassRenderable(entry, moduleName, repo);
5254
}
5355
if (isDecoratorEntry(entry)) {
54-
return getDecoratorRenderable(entry, moduleName);
56+
return getDecoratorRenderable(entry, moduleName, repo);
5557
}
5658
if (isConstantEntry(entry)) {
57-
return getConstantRenderable(entry, moduleName);
59+
return getConstantRenderable(entry, moduleName, repo);
5860
}
5961
if (isEnumEntry(entry)) {
60-
return getEnumRenderable(entry, moduleName);
62+
return getEnumRenderable(entry, moduleName, repo);
6163
}
6264
if (isInterfaceEntry(entry)) {
63-
return getInterfaceRenderable(entry, moduleName);
65+
return getInterfaceRenderable(entry, moduleName, repo);
6466
}
6567
if (isFunctionEntry(entry)) {
66-
return getFunctionRenderable(entry, moduleName);
68+
return getFunctionRenderable(entry, moduleName, repo);
6769
}
6870
if (isTypeAliasEntry(entry)) {
69-
return getTypeAliasRenderable(entry, moduleName);
71+
return getTypeAliasRenderable(entry, moduleName, repo);
7072
}
7173
if (isInitializerApiFunctionEntry(entry)) {
72-
return getInitializerApiFunctionRenderable(entry, moduleName);
74+
return getInitializerApiFunctionRenderable(entry, moduleName, repo);
7375
}
7476

7577
// Fallback to an uncategorized renderable.
7678
return setEntryFlags(
7779
addHtmlAdditionalLinks(
7880
addHtmlDescription(
79-
addHtmlUsageNotes(addHtmlJsDocTagComments(addModuleName(entry, moduleName))),
81+
addHtmlUsageNotes(addHtmlJsDocTagComments(addRepo(addModuleName(entry, moduleName), repo))),
8082
),
8183
),
8284
);

adev/shared-docs/pipeline/api-gen/rendering/templates/class-member.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ import {
2020
REFERENCE_MEMBER_CARD_HEADER,
2121
REFERENCE_MEMBER_CARD_ITEM,
2222
} from '../styling/css-classes';
23+
import {getFunctionMetadataRenderable} from '../transforms/function-transforms';
2324
import {ClassMethodInfo} from './class-method-info';
25+
import {CodeSymbol} from './code-symbols';
2426
import {DeprecatedLabel} from './deprecated-label';
2527
import {RawHtml} from './raw-html';
26-
import {getFunctionMetadataRenderable} from '../transforms/function-transforms';
27-
import {CodeSymbol} from './code-symbols';
2828

2929
export function ClassMember(props: {member: MemberEntryRenderable}) {
3030
const member = props.member;
3131

3232
const renderMethod = (method: MethodEntryRenderable) => {
3333
const signature = method.signatures.length ? method.signatures : [method.implementation];
3434
return signature.map((sig) => {
35-
const renderableMember = getFunctionMetadataRenderable(sig);
35+
const renderableMember = getFunctionMetadataRenderable(sig, method.moduleName, method.repo);
3636
return <ClassMethodInfo entry={renderableMember} options={{showUsageNotes: true}} />;
3737
});
3838
};

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

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

99
import {Fragment, h} from 'preact';
10+
import {PipeEntry} from '../entities';
1011
import {
1112
ClassEntryRenderable,
1213
DecoratorEntryRenderable,
1314
PipeEntryRenderable,
1415
} from '../entities/renderables';
15-
import {ClassMemberList} from './class-member-list';
16-
import {HeaderApi} from './header-api';
16+
import {codeToHtml} from '../shiki/shiki';
1717
import {
1818
API_REFERENCE_CONTAINER,
1919
REFERENCE_MEMBERS,
2020
SECTION_CONTAINER,
2121
} from '../styling/css-classes';
22-
import {SectionDescription} from './section-description';
23-
import {SectionUsageNotes} from './section-usage-notes';
22+
import {ClassMemberList} from './class-member-list';
23+
import {HeaderApi} from './header-api';
24+
import {RawHtml} from './raw-html';
2425
import {SectionApi} from './section-api';
26+
import {SectionDescription} from './section-description';
2527
import {SectionHeading} from './section-heading';
26-
import {PipeEntry} from '../entities';
27-
import {codeToHtml} from '../shiki/shiki';
28-
import {RawHtml} from './raw-html';
28+
import {SectionUsageNotes} from './section-usage-notes';
2929

3030
/** Component to render a class API reference document. */
3131
export function ClassReference(

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

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

9-
import {h, Fragment} from 'preact';
9+
import {Fragment, h} from 'preact';
1010
import {
1111
FunctionEntryRenderable,
1212
FunctionSignatureMetadataRenderable,
@@ -18,15 +18,15 @@ import {
1818
REFERENCE_MEMBER_CARD_BODY,
1919
REFERENCE_MEMBER_CARD_HEADER,
2020
} from '../styling/css-classes';
21+
import {printInitializerFunctionSignatureLine} from '../transforms/code-transforms';
22+
import {getFunctionMetadataRenderable} from '../transforms/function-transforms';
2123
import {ClassMethodInfo} from './class-method-info';
24+
import {CodeSymbol} from './code-symbols';
2225
import {HeaderApi} from './header-api';
26+
import {HighlightTypeScript} from './highlight-ts';
2327
import {SectionApi} from './section-api';
2428
import {SectionDescription} from './section-description';
2529
import {SectionUsageNotes} from './section-usage-notes';
26-
import {HighlightTypeScript} from './highlight-ts';
27-
import {printInitializerFunctionSignatureLine} from '../transforms/code-transforms';
28-
import {getFunctionMetadataRenderable} from '../transforms/function-transforms';
29-
import {CodeSymbol} from './code-symbols';
3030

3131
export const signatureCard = (
3232
name: string,
@@ -75,7 +75,7 @@ export function FunctionReference(entry: FunctionEntryRenderable) {
7575
{entry.signatures.map((s, i) =>
7676
signatureCard(
7777
s.name,
78-
getFunctionMetadataRenderable(s, entry.moduleName),
78+
getFunctionMetadataRenderable(s, entry.moduleName, entry.repo),
7979
{
8080
id: `${s.name}_${i}`,
8181
},

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import {
1818
import {DocsPillRow} from './docs-pill-row';
1919

2020
/** Component to render a header of the API page. */
21-
export function HeaderApi(props: {entry: DocEntryRenderable | PipeEntryRenderable; showFullDescription?: boolean}) {
21+
export function HeaderApi(props: {
22+
entry: DocEntryRenderable | PipeEntryRenderable;
23+
showFullDescription?: boolean;
24+
}) {
2225
const entry = props.entry;
2326

2427
// TODO: This link point to the main branch.
@@ -52,9 +55,7 @@ export function HeaderApi(props: {entry: DocEntryRenderable | PipeEntryRenderabl
5255
)}
5356

5457
{entry.entryType === EntryType.Pipe && !(entry as PipeEntry).isPure && (
55-
<div className={`${HEADER_ENTRY_LABEL} type-impure-pipe full`}>
56-
Impure
57-
</div>
58+
<div className={`${HEADER_ENTRY_LABEL} type-impure-pipe full`}>Impure</div>
5859
)}
5960
</div>
6061
{sourceUrl && (
@@ -107,6 +108,7 @@ function sourceUrlForEntry(entry: DocEntryRenderable): string | null {
107108
// We don't know the source path in external repos link the CLI
108109
return null;
109110
} else {
110-
return `https://github.com/angular/angular/blob/main${entry.source.filePath}#L${entry.source.startLine}-L${entry.source.endLine}`;
111+
const filePath = entry.source.filePath.replace(/^\//, '');
112+
return `https://github.com/${entry.repo}/blob/main/${filePath}#L${entry.source.startLine}-L${entry.source.endLine}`;
111113
}
112114
}

0 commit comments

Comments
 (0)