Skip to content

Commit 40d3251

Browse files
committed
feat: types for prerender options and result; better result checks
1 parent 34efcd2 commit 40d3251

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/plugins/prerender-plugin.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere
382382
return message;
383383
};
384384

385-
/** @type {import('./types.d.ts').Head} */
385+
/** @type {Partial<import('./types.d.ts').Head>} */
386386
let head = { lang: '', title: '', elements: new Set() };
387387

388388
let prerender;
@@ -420,9 +420,12 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere
420420
} catch {}
421421
}
422422

423+
/** @type {import('./types.d.ts').PrerenderResult | string} */
423424
let result;
424425
try {
425-
result = await prerender({ ssr: true, url: route.url, route });
426+
/** @type {import('./types.d.ts').PrerenderOptions} */
427+
const options = { ssr: true, url: route.url, route };
428+
result = await prerender(options);
426429
} catch (e) {
427430
const message = await handlePrerenderError(e);
428431
this.error(message);
@@ -438,7 +441,7 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere
438441
head = { lang: '', title: '', elements: new Set() };
439442

440443
// Add any discovered links to the list of routes to pre-render:
441-
if (result.links) {
444+
if (typeof result === 'object' && result.links) {
442445
for (let url of result.links) {
443446
const parsed = new URL(url, 'http://localhost');
444447
url = parsed.pathname.replace(/\/$/, '') || '/';
@@ -494,9 +497,9 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere
494497
const target = htmlDoc.querySelector(renderTarget);
495498
if (!target)
496499
this.error(
497-
result.renderTarget == 'body'
500+
renderTarget == 'body'
498501
? '`renderTarget` was not specified in plugin options and <body> does not exist in input HTML template'
499-
: `Unable to detect prerender renderTarget "${result.selector}" in input HTML template`,
502+
: `Unable to detect prerender renderTarget "${renderTarget}" in input HTML template`,
500503
);
501504
target.insertAdjacentHTML('afterbegin', body);
502505

src/plugins/types.d.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,19 @@ export interface PrerenderedRoute {
1414
url: string;
1515
_discoveredBy?: PrerenderedRoute;
1616
}
17+
18+
export interface PrerenderOptions {
19+
ssr: true;
20+
url: string;
21+
route: PrerenderedRoute;
22+
}
23+
24+
export interface PrerenderResult {
25+
html?: string;
26+
head?: Partial<Head>;
27+
links?: Set<string>;
28+
/**
29+
* @description Caution: should be a valid JSON object
30+
*/
31+
data?: any;
32+
}

0 commit comments

Comments
 (0)