From 6c43690557e435e6f7f9f3395ea8ecacfeaa168b Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 21 Sep 2023 13:48:25 +0800 Subject: [PATCH 1/3] fix client-side and vite preview trailing slash --- packages/kit/src/exports/vite/preview/index.js | 10 ++++++++++ packages/kit/src/runtime/client/client.js | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 1e5045dd3bda..b5116738cab9 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -75,6 +75,16 @@ export async function preview(vite, vite_config, svelte_config) { const original_url = /** @type {string} */ (req.url); const { pathname } = new URL(original_url, 'http://dummy'); + // if `paths.base === '/a/b/c`, then the root route is `/a/b/c/`, + // regardless of the `trailingSlash` route option + if (base.length > 1 && pathname === base) { + res.writeHead(307, { + location: base + '/' + }); + res.end(); + return; + } + if (pathname.startsWith(base)) { next(); } else { diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index e9b660f2cd36..450756fec85c 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -556,7 +556,12 @@ export function create_client(app, target) { server: server_data_node, universal: node.universal?.load ? { type: 'data', data, uses } : null, data: data ?? server_data_node?.data ?? null, - slash: node.universal?.trailingSlash ?? server_data_node?.slash + // if `paths.base === '/a/b/c`, then the root route is `/a/b/c/`, + // regardless of the `trailingSlash` route option + slash: + url.pathname === base || url.pathname === base + '/' + ? 'always' + : node.universal?.trailingSlash ?? server_data_node?.slash }; } From 1e0e52c5135f608cf9d2502d82383ce10fe7effe Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 21 Sep 2023 13:51:36 +0800 Subject: [PATCH 2/3] changeset --- .changeset/rich-pandas-provide.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rich-pandas-provide.md diff --git a/.changeset/rich-pandas-provide.md b/.changeset/rich-pandas-provide.md new file mode 100644 index 000000000000..4b2ca5c9ec39 --- /dev/null +++ b/.changeset/rich-pandas-provide.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: prerendered root page with `paths.base` config uses correct trailing slash option From 6cd46231080b8208e9bb0f4ae6b5af79d2211ac9 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 3 Dec 2023 15:04:30 +0800 Subject: [PATCH 3/3] account for search params --- packages/kit/src/exports/vite/preview/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index a1d7715f013e..f535968b5c46 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -71,13 +71,15 @@ export async function preview(vite, vite_config, svelte_config) { vite.middlewares.use((req, res, next) => { const original_url = /** @type {string} */ (req.url); - const { pathname } = new URL(original_url, 'http://dummy'); + const { pathname, search } = new URL(original_url, 'http://dummy'); // if `paths.base === '/a/b/c`, then the root route is `/a/b/c/`, // regardless of the `trailingSlash` route option if (base.length > 1 && pathname === base) { + let location = base + '/'; + if (search) location += search; res.writeHead(307, { - location: base + '/' + location }); res.end(); return;