diff --git a/.changeset/early-lemons-collect.md b/.changeset/early-lemons-collect.md new file mode 100644 index 000000000000..d8786c005fd6 --- /dev/null +++ b/.changeset/early-lemons-collect.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[breaking] rename prerender.pages config option to prerender.entries diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index e5d8db67b877..2c97793b72bc 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -48,8 +48,8 @@ const config = { prerender: { crawl: true, enabled: true, - onError: 'fail', - pages: ['*'] + entries: ['*'], + onError: 'fail' }, router: true, serviceWorker: { @@ -148,6 +148,7 @@ See [Prerendering](#ssr-and-javascript-prerender). An object containing zero or - `crawl` — determines whether SvelteKit should find pages to prerender by following links from the seed page(s) - `enabled` — set to `false` to disable prerendering altogether +- `entries` — an array of pages to prerender, or start crawling from (if `crawl: true`). The `*` string includes all non-dynamic routes (i.e. pages with no `[parameters]` ) - `onError` - `'fail'` — (default) fails the build when a routing error is encountered when following a link @@ -172,8 +173,6 @@ See [Prerendering](#ssr-and-javascript-prerender). An object containing zero or }; ``` -- `pages` — an array of pages to prerender, or start crawling from (if `crawl: true`). The `*` string includes all non-dynamic routes (i.e. pages with no `[parameters]` ) - ### router Enables or disables the client-side [router](#ssr-and-javascript-router) app-wide. diff --git a/packages/kit/src/core/adapt/prerender.js b/packages/kit/src/core/adapt/prerender.js index 803f8cd910ce..486f80c3afc3 100644 --- a/packages/kit/src/core/adapt/prerender.js +++ b/packages/kit/src/core/adapt/prerender.js @@ -276,7 +276,7 @@ export async function prerender({ cwd, out, log, config, build_data, fallback, a } if (config.kit.prerender.enabled) { - for (const entry of config.kit.prerender.pages) { + for (const entry of config.kit.prerender.entries) { if (entry === '*') { for (const entry of build_data.entries) { await visit(entry, null); diff --git a/packages/kit/src/core/adapt/test/index.js b/packages/kit/src/core/adapt/test/index.js index d1b3cd94093a..9d43ffeff4f6 100644 --- a/packages/kit/src/core/adapt/test/index.js +++ b/packages/kit/src/core/adapt/test/index.js @@ -91,8 +91,8 @@ suite('prerender', async () => { }, appDir: '_app', prerender: { - pages: ['*'], - enabled: true + enabled: true, + entries: ['*'] } } }; diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 1cb28a5df05f..f110463fa9b2 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -48,10 +48,10 @@ test('fills in defaults', () => { prerender: { crawl: true, enabled: true, - // TODO: remove this for the 1.0 release + entries: ['*'], force: undefined, onError: 'fail', - pages: ['*'] + pages: undefined }, router: true, ssr: true, @@ -156,10 +156,10 @@ test('fills in partial blanks', () => { prerender: { crawl: true, enabled: true, - // TODO: remove this for the 1.0 release + entries: ['*'], force: undefined, onError: 'fail', - pages: ['*'] + pages: undefined }, router: true, ssr: true, @@ -257,16 +257,16 @@ test('fails if paths.assets has trailing slash', () => { }, /^config\.kit\.paths\.assets option must not end with '\/'. See https:\/\/kit\.svelte\.dev\/docs#configuration-paths$/); }); -test('fails if prerender.pages are invalid', () => { +test('fails if prerender.entries are invalid', () => { assert.throws(() => { validate_config({ kit: { prerender: { - pages: ['foo'] + entries: ['foo'] } } }); - }, /^Each member of config\.kit.prerender.pages must be either '\*' or an absolute path beginning with '\/' — saw 'foo'$/); + }, /^Each member of config\.kit.prerender.entries must be either '\*' or an absolute path beginning with '\/' — saw 'foo'$/); }); /** diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index b9848a847e94..213064e42e45 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -122,6 +122,21 @@ const options = object( prerender: object({ crawl: boolean(true), enabled: boolean(true), + entries: validate(['*'], (input, keypath) => { + if (!Array.isArray(input) || !input.every((page) => typeof page === 'string')) { + throw new Error(`${keypath} must be an array of strings`); + } + + input.forEach((page) => { + if (page !== '*' && page[0] !== '/') { + throw new Error( + `Each member of ${keypath} must be either '*' or an absolute path beginning with '/' — saw '${page}'` + ); + } + }); + + return input; + }), // TODO: remove this for the 1.0 release force: validate(undefined, (input, keypath) => { if (typeof input !== undefined) { @@ -141,20 +156,11 @@ const options = object( `${keypath} should be either a custom function or one of "continue" or "fail"` ); }), - pages: validate(['*'], (input, keypath) => { - if (!Array.isArray(input) || !input.every((page) => typeof page === 'string')) { - throw new Error(`${keypath} must be an array of strings`); + // TODO: remove this for the 1.0 release + pages: validate(undefined, (input, keypath) => { + if (typeof input !== undefined) { + throw new Error(`${keypath} has been renamed to \`entries\`.`); } - - input.forEach((page) => { - if (page !== '*' && page[0] !== '/') { - throw new Error( - `Each member of ${keypath} must be either '*' or an absolute path beginning with '/' — saw '${page}'` - ); - } - }); - - return input; }) }), diff --git a/packages/kit/src/core/config/test/index.js b/packages/kit/src/core/config/test/index.js index 726406fd95f8..3d7f7dfc9714 100644 --- a/packages/kit/src/core/config/test/index.js +++ b/packages/kit/src/core/config/test/index.js @@ -52,7 +52,14 @@ async function testLoadDefaultConfig(path) { exclude: [] }, paths: { base: '', assets: '' }, - prerender: { crawl: true, enabled: true, force: undefined, onError: 'fail', pages: ['*'] }, + prerender: { + crawl: true, + enabled: true, + entries: ['*'], + force: undefined, + onError: 'fail', + pages: undefined + }, router: true, ssr: true, target: null, diff --git a/packages/kit/types/config.d.ts b/packages/kit/types/config.d.ts index b31a13e627ca..3ff95f46fbb2 100644 --- a/packages/kit/types/config.d.ts +++ b/packages/kit/types/config.d.ts @@ -67,8 +67,8 @@ export interface Config { prerender?: { crawl?: boolean; enabled?: boolean; + entries?: string[]; onError?: PrerenderOnErrorValue; - pages?: string[]; }; router?: boolean; serviceWorker?: {