From 37ce4c80c91a580515e2bbe29cae609fc1754663 Mon Sep 17 00:00:00 2001 From: John Simons Date: Thu, 8 Jul 2021 16:23:36 -0700 Subject: [PATCH] Option to pre-render the dynamic routes --- packages/kit/src/core/adapt/prerender.js | 6 ++++++ packages/kit/src/core/adapt/test/index.js | 10 ++++++++-- packages/kit/src/core/build/index.js | 5 ++++- packages/kit/src/core/config/options.js | 2 +- packages/kit/types/internal.d.ts | 1 + 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/kit/src/core/adapt/prerender.js b/packages/kit/src/core/adapt/prerender.js index f06afd18f91e..b80f2a0bf5f8 100644 --- a/packages/kit/src/core/adapt/prerender.js +++ b/packages/kit/src/core/adapt/prerender.js @@ -236,6 +236,12 @@ export async function prerender({ cwd, out, log, config, build_data, fallback, a for (const entry of build_data.entries) { await visit(entry, null); } + } else if (entry === '**') { + for (const route of build_data.dynamic_routes) { + const svelte_path = route.a[route.a.length - 1]; + const match = svelte_path.match(/^src\/routes(.*)\.svelte$/); + await visit(match[1], null); + } } else { 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 8650927a4093..ddaf7fb49470 100644 --- a/packages/kit/src/core/adapt/test/index.js +++ b/packages/kit/src/core/adapt/test/index.js @@ -40,7 +40,7 @@ suite('copy files', () => { }; /** @type {import('types/internal').BuildData} */ - const build_data = { client: [], server: [], static: [], entries: [] }; + const build_data = { client: [], server: [], static: [], entries: [], dynamic_routes: [] }; const utils = get_utils({ cwd, config, build_data, log }); @@ -91,7 +91,13 @@ suite('prerender', async () => { }; /** @type {import('types/internal').BuildData} */ - const build_data = { client: [], server: [], static: [], entries: ['/nested'] }; + const build_data = { + client: [], + server: [], + static: [], + entries: ['/nested'], + dynamic_routes: [] + }; const utils = get_utils({ cwd, config, build_data, log }); diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index da8cb87ff7f6..2af1d1cdfa8e 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -74,7 +74,10 @@ export async function build(config, { cwd = process.cwd(), runtime = '@sveltejs/ static: options.manifest.assets.map((asset) => posixify(asset.file)), entries: options.manifest.routes .map((route) => route.type === 'page' && route.path) - .filter(Boolean) + .filter(Boolean), + // prettier-ignore + /** @type import('types/internal').PageData[] */ + dynamic_routes: (options.manifest.routes.filter((route) => route.type === 'page' && !route.path)) }; } diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 567a8c2b906b..ebdda436dbfc 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -130,7 +130,7 @@ const options = { } option.forEach((page) => { - if (page !== '*' && page[0] !== '/') { + if (page !== '*' && page !== '**' && page[0] !== '/') { throw new Error( `Each member of ${keypath} must be either '*' or an absolute path beginning with '/' — saw '${page}'` ); diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index 7f4ef6f9cea4..da8e11af3f68 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -200,6 +200,7 @@ export type BuildData = { server: string[]; static: string[]; entries: string[]; + dynamic_routes: PageData[]; }; export type NormalizedLoadOutput = {