From 71f2f46fc632b29f2d0d15d598872dfc3ca67754 Mon Sep 17 00:00:00 2001 From: Andrew Soutar Date: Thu, 13 Jan 2022 22:16:32 -0500 Subject: [PATCH 1/7] Fix svelte-kit dev/preview when config.kit.paths.base is set --- packages/kit/src/core/dev/plugin.js | 4 ++-- packages/kit/src/runtime/server/index.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/core/dev/plugin.js b/packages/kit/src/core/dev/plugin.js index 7d03f05b4657..a28c17cf816f 100644 --- a/packages/kit/src/core/dev/plugin.js +++ b/packages/kit/src/core/dev/plugin.js @@ -179,7 +179,7 @@ export async function create_plugin(config, output, cwd) { paths.set_paths({ base: config.kit.paths.base, - assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : config.kit.paths.base + assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : '' }); let body; @@ -218,7 +218,7 @@ export async function create_plugin(config, output, cwd) { method_override: config.kit.methodOverride, paths: { base: config.kit.paths.base, - assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : config.kit.paths.base + assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : '' }, prefix: '', prerender: config.kit.prerender.enabled, diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 5a4b63b32480..a65ebde14f79 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -105,7 +105,7 @@ export async function respond(incoming, options, state = {}) { }); } - const decoded = decodeURI(request.url.pathname).replace(options.paths.base, ''); + const decoded = decodeURI(request.url.pathname).replace(options.paths.base, '') || '/'; for (const route of options.manifest._.routes) { const match = route.pattern.exec(decoded); From d2e4aea3b3ba86073d7754d0335b4df57af588f5 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 14 Jan 2022 14:20:56 -0500 Subject: [PATCH 2/7] add test of truncated base --- packages/kit/src/core/dev/plugin.js | 4 ++-- .../kit/test/apps/options-2/svelte.config.js | 3 +++ packages/kit/test/apps/options-2/test/test.js | 16 +++++++++------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/kit/src/core/dev/plugin.js b/packages/kit/src/core/dev/plugin.js index a28c17cf816f..7d03f05b4657 100644 --- a/packages/kit/src/core/dev/plugin.js +++ b/packages/kit/src/core/dev/plugin.js @@ -179,7 +179,7 @@ export async function create_plugin(config, output, cwd) { paths.set_paths({ base: config.kit.paths.base, - assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : '' + assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : config.kit.paths.base }); let body; @@ -218,7 +218,7 @@ export async function create_plugin(config, output, cwd) { method_override: config.kit.methodOverride, paths: { base: config.kit.paths.base, - assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : '' + assets: config.kit.paths.assets ? SVELTE_KIT_ASSETS : config.kit.paths.base }, prefix: '', prerender: config.kit.prerender.enabled, diff --git a/packages/kit/test/apps/options-2/svelte.config.js b/packages/kit/test/apps/options-2/svelte.config.js index 5ef4ec64ac44..29ef3a0e1285 100644 --- a/packages/kit/test/apps/options-2/svelte.config.js +++ b/packages/kit/test/apps/options-2/svelte.config.js @@ -1,6 +1,9 @@ /** @type {import('@sveltejs/kit').Config} */ const config = { kit: { + paths: { + base: '/basepath' + }, serviceWorker: { register: false } diff --git a/packages/kit/test/apps/options-2/test/test.js b/packages/kit/test/apps/options-2/test/test.js index df6d13b07fdb..6c0876aef575 100644 --- a/packages/kit/test/apps/options-2/test/test.js +++ b/packages/kit/test/apps/options-2/test/test.js @@ -3,22 +3,24 @@ import { test } from '../../../utils.js'; /** @typedef {import('@playwright/test').Response} Response */ -test.describe.parallel('Service worker', () => { - test('serves /', async ({ page }) => { - await page.goto('/'); +test.describe.parallel('paths.base', () => { + test('serves /basepath', async ({ page }) => { + await page.goto('/basepath'); expect(await page.textContent('h1')).toBe('Hello'); }); +}); +test.describe.parallel('Service worker', () => { if (!process.env.DEV) { - test('build /service-worker.js', async ({ request }) => { - const response = await request.get('/service-worker.js'); + test('build /basepath/service-worker.js', async ({ request }) => { + const response = await request.get('/basepath/service-worker.js'); const content = await response.text(); expect(content).toMatch(/\/_app\/start-[a-z0-9]+\.js/); }); - test('does not register /service-worker.js', async ({ page }) => { - await page.goto('/'); + test('does not register /basepath/service-worker.js', async ({ page }) => { + await page.goto('/basepath'); expect(await page.content()).not.toMatch(/navigator\.serviceWorker/); }); } From 7ff5b81a070534f4b1ec28ff549c1e3909bab327 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 14 Jan 2022 14:29:25 -0500 Subject: [PATCH 3/7] changeset --- .changeset/curly-pets-vanish.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/curly-pets-vanish.md diff --git a/.changeset/curly-pets-vanish.md b/.changeset/curly-pets-vanish.md new file mode 100644 index 000000000000..959435bfdaef --- /dev/null +++ b/.changeset/curly-pets-vanish.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Handle requests for /basepath From 0d6ef149ff5fa0fc4fc1c1a99a44e0a599daa1ef Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 14 Jan 2022 15:14:49 -0500 Subject: [PATCH 4/7] handle edge cases --- packages/kit/src/core/adapt/prerender/prerender.js | 4 +++- packages/kit/src/runtime/server/index.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/core/adapt/prerender/prerender.js b/packages/kit/src/core/adapt/prerender/prerender.js index 5ffb1ac6dc07..eaaa64c0c02a 100644 --- a/packages/kit/src/core/adapt/prerender/prerender.js +++ b/packages/kit/src/core/adapt/prerender/prerender.js @@ -229,7 +229,9 @@ export async function prerender({ cwd, out, log, config, build_data, fallback, a if (!is_root_relative(resolved)) continue; const parsed = new URL(resolved, 'http://localhost'); - const pathname = decodeURI(parsed.pathname).replace(config.kit.paths.base, ''); + + if (!parsed.pathname.startsWith(config.kit.paths.base)) continue; + const pathname = decodeURI(parsed.pathname).slice(config.kit.paths.base.length) || '/'; const file = pathname.slice(1); if (files.has(file)) continue; diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index a65ebde14f79..8bb4c2a330cd 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -90,6 +90,8 @@ export async function respond(incoming, options, state = {}) { resolve: async (request, opts) => { if (opts && 'ssr' in opts) ssr = /** @type {boolean} */ (opts.ssr); + if (!request.url.pathname.startsWith(options.paths.base)) return; + if (state.prerender && state.prerender.fallback) { return await render_response({ url: request.url, @@ -105,7 +107,7 @@ export async function respond(incoming, options, state = {}) { }); } - const decoded = decodeURI(request.url.pathname).replace(options.paths.base, '') || '/'; + const decoded = decodeURI(request.url.pathname).slice(options.paths.base.length) || '/'; for (const route of options.manifest._.routes) { const match = route.pattern.exec(decoded); From 700ad5f3f1497bb908f58915ad1bd48fb21f98b9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 14 Jan 2022 15:17:38 -0500 Subject: [PATCH 5/7] actually i guess this belongs here --- packages/kit/src/runtime/server/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 8bb4c2a330cd..e7684d5f96d6 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -90,8 +90,6 @@ export async function respond(incoming, options, state = {}) { resolve: async (request, opts) => { if (opts && 'ssr' in opts) ssr = /** @type {boolean} */ (opts.ssr); - if (!request.url.pathname.startsWith(options.paths.base)) return; - if (state.prerender && state.prerender.fallback) { return await render_response({ url: request.url, @@ -107,6 +105,7 @@ export async function respond(incoming, options, state = {}) { }); } + if (!request.url.pathname.startsWith(options.paths.base)) return; const decoded = decodeURI(request.url.pathname).slice(options.paths.base.length) || '/'; for (const route of options.manifest._.routes) { From 2980840920fc94d00509599c5c82aa748ccef7ea Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 14 Jan 2022 17:39:26 -0500 Subject: [PATCH 6/7] decode then check --- packages/kit/src/core/adapt/prerender/prerender.js | 8 ++++++-- packages/kit/src/runtime/server/index.js | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/kit/src/core/adapt/prerender/prerender.js b/packages/kit/src/core/adapt/prerender/prerender.js index eaaa64c0c02a..2aa5ef535c71 100644 --- a/packages/kit/src/core/adapt/prerender/prerender.js +++ b/packages/kit/src/core/adapt/prerender/prerender.js @@ -230,8 +230,12 @@ export async function prerender({ cwd, out, log, config, build_data, fallback, a const parsed = new URL(resolved, 'http://localhost'); - if (!parsed.pathname.startsWith(config.kit.paths.base)) continue; - const pathname = decodeURI(parsed.pathname).slice(config.kit.paths.base.length) || '/'; + let pathname = decodeURI(parsed.pathname); + + if (config.kit.paths.base) { + if (!pathname.startsWith(config.kit.paths.base)) continue; + pathname = pathname.slice(config.kit.paths.base.length) || '/'; + } const file = pathname.slice(1); if (files.has(file)) continue; diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index e7684d5f96d6..8b152b6f496c 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -105,8 +105,12 @@ export async function respond(incoming, options, state = {}) { }); } - if (!request.url.pathname.startsWith(options.paths.base)) return; - const decoded = decodeURI(request.url.pathname).slice(options.paths.base.length) || '/'; + let decoded = decodeURI(request.url.pathname); + + if (options.paths.base) { + if (!decoded.startsWith(options.paths.base)) return; + decoded = decoded.slice(options.paths.base.length) || '/'; + } for (const route of options.manifest._.routes) { const match = route.pattern.exec(decoded); From 291c4f6d9ee369999644b872a305cde94b796c7a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 14 Jan 2022 17:39:33 -0500 Subject: [PATCH 7/7] fix newly failing test --- .../kit/test/apps/options/source/pages/origin/index.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/kit/test/apps/options/source/pages/origin/index.svelte b/packages/kit/test/apps/options/source/pages/origin/index.svelte index ae0b97528978..ecdf102ef558 100644 --- a/packages/kit/test/apps/options/source/pages/origin/index.svelte +++ b/packages/kit/test/apps/options/source/pages/origin/index.svelte @@ -1,7 +1,9 @@