Skip to content

Commit 6d9a52f

Browse files
committed
feat: add option for css preloads when prerendering
`KitConfig.prerender.generateCssPreloadTags` will configure whether preload tags for stylesheets are generated during prerendering.
1 parent 247aeb7 commit 6d9a52f

File tree

8 files changed

+26
-0
lines changed

8 files changed

+26
-0
lines changed

.changeset/sixty-planets-love.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@sveltejs/kit": minor
3+
---
4+
5+
feat: add option for css preloads when prerendering

packages/kit/src/core/config/index.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ const get_defaults = (prefix = '') => ({
106106
concurrency: 1,
107107
crawl: true,
108108
entries: ['*'],
109+
generateCssPreloadTags: false,
109110
origin: 'http://sveltekit-prerender'
110111
},
111112
version: {

packages/kit/src/core/config/options.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ const options = object(
197197
return input;
198198
}),
199199

200+
generateCssPreloadTags: boolean(false),
200201
handleHttpError: validate(
201202
(/** @type {any} */ { message }) => {
202203
throw new Error(

packages/kit/src/core/sync/write_server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export const options = {
4141
embedded: ${config.kit.embedded},
4242
env_public_prefix: '${config.kit.env.publicPrefix}',
4343
env_private_prefix: '${config.kit.env.privatePrefix}',
44+
generate_css_preload_tags: ${config.kit.prerender.generateCssPreloadTags},
4445
hooks: null, // added lazily, via \`get_hooks\`
4546
preload_strategy: ${s(config.kit.output.preloadStrategy)},
4647
root,

packages/kit/src/exports/public.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,13 @@ export interface KitConfig {
544544
* @default ["*"]
545545
*/
546546
entries?: Array<'*' | `/${string}`>;
547+
/**
548+
* Whether SvelteKit should generate `<link rel="preload">` tags for stylesheets.
549+
* This is useful for Cloudflare Pages's [Early Hints](https://developers.cloudflare.com/pages/configuration/early-hints/) feature, which looks for these tags to automatically generate Link headers.
550+
*
551+
* @default false
552+
*/
553+
generateCssPreloadTags?: boolean;
547554
/**
548555
* How to respond to HTTP errors encountered while prerendering the app.
549556
*

packages/kit/src/runtime/server/page/render.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ export async function render_response({
236236
if (resolve_opts.preload({ type: 'css', path })) {
237237
const preload_atts = ['rel="preload"', 'as="style"'];
238238
link_header_preloads.add(`<${encodeURI(path)}>; ${preload_atts.join(';')}; nopush`);
239+
if (options.generate_css_preload_tags && state.prerendering) {
240+
head += `\n\t\t<link href="${path}" ${preload_atts.join(' ')}>`;
241+
}
239242
}
240243
}
241244

packages/kit/src/types/internal.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,7 @@ export interface SSROptions {
360360
embedded: boolean;
361361
env_public_prefix: string;
362362
env_private_prefix: string;
363+
generate_css_preload_tags: boolean;
363364
hooks: ServerHooks;
364365
preload_strategy: ValidatedConfig['kit']['output']['preloadStrategy'];
365366
root: SSRComponent['default'];

packages/kit/types/index.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,13 @@ declare module '@sveltejs/kit' {
526526
* @default ["*"]
527527
*/
528528
entries?: Array<'*' | `/${string}`>;
529+
/**
530+
* Whether SvelteKit should generate `<link rel="preload">` tags for stylesheets.
531+
* This is useful for Cloudflare Pages's [Early Hints](https://developers.cloudflare.com/pages/configuration/early-hints/) feature, which looks for these tags to automatically generate Link headers.
532+
*
533+
* @default false
534+
*/
535+
generateCssPreloadTags?: boolean;
529536
/**
530537
* How to respond to HTTP errors encountered while prerendering the app.
531538
*

0 commit comments

Comments
 (0)