Skip to content

Commit f5d676e

Browse files
committed
Make rendering types more lax
1 parent 309a07c commit f5d676e

File tree

11 files changed

+195
-120
lines changed

11 files changed

+195
-120
lines changed

src/lib/output/components.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as Path from "path";
22

33
import { AbstractComponent } from "../utils/component.js";
4-
import type { ProjectReflection, Reflection } from "../models/index.js";
4+
import type { ProjectReflection } from "../models/index.js";
55
import type { Renderer } from "./renderer.js";
66
import { PageEvent, RendererEvent } from "./events.js";
77
import { Option } from "../utils/index.js";
@@ -23,7 +23,7 @@ export abstract class ContextAwareRendererComponent extends RendererComponent {
2323
/**
2424
* The reflection that is currently processed.
2525
*/
26-
protected page?: PageEvent<Reflection>;
26+
protected page?: PageEvent;
2727

2828
/**
2929
* The url of the document that is being currently generated.
@@ -94,7 +94,7 @@ export abstract class ContextAwareRendererComponent extends RendererComponent {
9494
*
9595
* @param page An event object describing the current render operation.
9696
*/
97-
protected onBeginPage(page: PageEvent<Reflection>) {
97+
protected onBeginPage(page: PageEvent) {
9898
this.location = Path.posix.dirname(page.url);
9999
this.page = page;
100100
}

src/lib/output/events.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import type { ProjectReflection } from "../models/ProjectReflection.js";
2-
import type { DeclarationReflection, DocumentReflection, ReflectionKind } from "../models/index.js";
3-
import type { PageDefinition, PageKind } from "./router.js";
2+
import {
3+
type DeclarationReflection,
4+
type DocumentReflection,
5+
Reflection,
6+
type ReflectionKind,
7+
} from "../models/index.js";
8+
import type { PageDefinition, PageKind, RouterTarget } from "./router.js";
49

510
/**
611
* An event emitted by the {@link Renderer} class at the very beginning and
@@ -63,7 +68,7 @@ export interface PageHeading {
6368
* @see {@link Renderer.EVENT_BEGIN_PAGE}
6469
* @see {@link Renderer.EVENT_END_PAGE}
6570
*/
66-
export class PageEvent<out Model = unknown> {
71+
export class PageEvent<out Model extends RouterTarget = RouterTarget> {
6772
/**
6873
* The project the renderer is currently processing.
6974
*/
@@ -139,6 +144,10 @@ export class PageEvent<out Model = unknown> {
139144
constructor(model: Model) {
140145
this.model = model;
141146
}
147+
148+
isReflectionEvent(): this is PageEvent<Reflection> {
149+
return this.model instanceof Reflection;
150+
}
142151
}
143152

144153
/**

src/lib/output/plugins/JavascriptIndexPlugin.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as Path from "path";
22
import lunr from "lunr";
33

4-
import type { Comment, DeclarationReflection, DocumentReflection, Reflection } from "../../models/index.js";
4+
import { type Comment, type DeclarationReflection, type DocumentReflection, Reflection } from "../../models/index.js";
55
import { RendererComponent } from "../components.js";
66
import { IndexEvent, RendererEvent } from "../events.js";
77
import { Option, writeFile } from "../../utils/index.js";
@@ -70,9 +70,10 @@ export class JavascriptIndexPlugin extends RendererComponent {
7070
const rows: SearchDocument[] = [];
7171

7272
const initialSearchResults = this.owner
73-
.router!.getLinkableReflections()
73+
.router!.getLinkTargets()
7474
.filter(
7575
(refl) =>
76+
refl instanceof Reflection &&
7677
(refl.isDeclaration() || refl.isDocument()) &&
7778
refl.name &&
7879
!refl.flags.isExternal,

src/lib/output/renderer.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ export interface RendererHooks {
125125

126126
export interface RendererEvents {
127127
beginRender: [RendererEvent];
128-
beginPage: [PageEvent<Reflection>];
129-
endPage: [PageEvent<Reflection>];
128+
beginPage: [PageEvent];
129+
endPage: [PageEvent];
130130
endRender: [RendererEvent];
131131

132132
parseMarkdown: [MarkdownEvent];
@@ -333,7 +333,7 @@ export class Renderer extends AbstractComponent<Application, RendererEvents> {
333333
`There are ${pages.length} pages to write.`,
334334
);
335335
for (const page of pages) {
336-
this.renderDocument(outputDirectory, page);
336+
this.renderDocument(outputDirectory, page, project);
337337
}
338338

339339
this.postRenderAsyncJobs.push(async o => await this.theme!.postRender(o));
@@ -365,14 +365,14 @@ export class Renderer extends AbstractComponent<Application, RendererEvents> {
365365
* @param page An event describing the current page.
366366
* @return TRUE if the page has been saved to disc, otherwise FALSE.
367367
*/
368-
private renderDocument(outputDirectory: string, page: PageDefinition) {
368+
private renderDocument(outputDirectory: string, page: PageDefinition, project: ProjectReflection) {
369369
const momento = this.hooks.saveMomento();
370370

371371
const event = new PageEvent(page.model);
372372
event.url = page.url;
373373
event.filename = path.join(outputDirectory, page.url);
374374
event.pageKind = page.kind;
375-
event.project = page.model.project;
375+
event.project = project;
376376

377377
this.trigger(PageEvent.BEGIN, event);
378378

0 commit comments

Comments
 (0)