diff --git a/.changeset/famous-fans-cheer.md b/.changeset/famous-fans-cheer.md new file mode 100644 index 000000000000..36cc241962a4 --- /dev/null +++ b/.changeset/famous-fans-cheer.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: keep resolve relative to initial base during prerender diff --git a/packages/kit/src/runtime/app/paths/internal/server.js b/packages/kit/src/runtime/app/paths/internal/server.js index a7eaf2381191..cd71e77db073 100644 --- a/packages/kit/src/runtime/app/paths/internal/server.js +++ b/packages/kit/src/runtime/app/paths/internal/server.js @@ -5,6 +5,12 @@ export const relative = __SVELTEKIT_PATHS_RELATIVE__; const initial = { base, assets }; +/** + * `base` could be overridden during rendering to be relative; + * this one's the original non-relative base path + */ +export const initial_base = initial.base; + /** * @param {{ base: string, assets: string }} paths */ diff --git a/packages/kit/src/runtime/app/paths/server.js b/packages/kit/src/runtime/app/paths/server.js index 7b409659d7a9..abee8466006e 100644 --- a/packages/kit/src/runtime/app/paths/server.js +++ b/packages/kit/src/runtime/app/paths/server.js @@ -1,4 +1,4 @@ -import { base, assets, relative } from './internal/server.js'; +import { base, assets, relative, initial_base } from './internal/server.js'; import { resolve_route } from '../../../utils/routing.js'; import { try_get_request_store } from '@sveltejs/kit/internal/server'; @@ -16,7 +16,8 @@ export function resolve(id, params) { const store = try_get_request_store(); if (store && !store.state.prerendering?.fallback) { - const segments = store.event.url.pathname.slice(base.length).split('/').slice(2); + const after_base = store.event.url.pathname.slice(initial_base.length); + const segments = after_base.split('/').slice(2); const prefix = segments.map(() => '..').join('/') || '.'; return prefix + resolved; diff --git a/packages/kit/test/prerendering/basics/src/routes/resolve-relative/lv1/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/resolve-relative/lv1/+page.svelte new file mode 100644 index 000000000000..ed1715de0f3d --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/resolve-relative/lv1/+page.svelte @@ -0,0 +1 @@ +