Skip to content

Commit 3b2e989

Browse files
feat: types for prerender options and result; better result checks (#29)
* feat: types for prerender options and result; better result checks * chore: Revert unnecessary changes * fix: Correct & re-export types * chore: Ensure TS LSP raises errors on `.d.ts` files --------- Co-authored-by: Ryan Christian <rchristian@ryanchristian.dev>
1 parent 34efcd2 commit 3b2e989

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

jsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"allowJs": true,
77
"checkJs": true,
88
"resolveJsonModule": true,
9-
"noEmit": true
9+
"noEmit": true,
10+
"skipLibCheck": false
1011
}
1112
}

src/index.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ export interface PreviewMiddlewareOptions {
1313
export type Options = PrerenderOptions & PreviewMiddlewareOptions;
1414

1515
export function vitePrerenderPlugin(options?: Options): Plugin[];
16+
17+
export type { PrerenderArguments, PrerenderResult } from './plugins/types.d.ts';

src/plugins/prerender-plugin.js

Lines changed: 4 additions & 3 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,6 +420,7 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere
420420
} catch {}
421421
}
422422

423+
/** @type {import('./types.d.ts').PrerenderResult} */
423424
let result;
424425
try {
425426
result = await prerender({ ssr: true, url: route.url, route });
@@ -494,9 +495,9 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere
494495
const target = htmlDoc.querySelector(renderTarget);
495496
if (!target)
496497
this.error(
497-
result.renderTarget == 'body'
498+
renderTarget == 'body'
498499
? '`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`,
500+
: `Unable to detect prerender renderTarget "${renderTarget}" in input HTML template`,
500501
);
501502
target.insertAdjacentHTML('afterbegin', body);
502503

src/plugins/types.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,16 @@ export interface PrerenderedRoute {
1414
url: string;
1515
_discoveredBy?: PrerenderedRoute;
1616
}
17+
18+
export interface PrerenderArguments {
19+
ssr: true;
20+
url: string;
21+
route: PrerenderedRoute;
22+
}
23+
24+
export type PrerenderResult = {
25+
html: string;
26+
links?: Set<string>;
27+
data?: any;
28+
head?: Partial<Head>;
29+
} | string

0 commit comments

Comments
 (0)