diff --git a/.changeset/small-mayflies-repeat.md b/.changeset/small-mayflies-repeat.md new file mode 100644 index 000000000000..fa435cb75456 --- /dev/null +++ b/.changeset/small-mayflies-repeat.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: allow logging `$page.url` during prerendering diff --git a/packages/kit/src/utils/url.js b/packages/kit/src/utils/url.js index 2eb7f997913a..3d5c7cd1c7a6 100644 --- a/packages/kit/src/utils/url.js +++ b/packages/kit/src/utils/url.js @@ -139,6 +139,8 @@ export function make_trackable(url, callback) { * @param {URL} url */ export function disable_hash(url) { + allow_nodejs_console_log(url); + Object.defineProperty(url, 'hash', { get() { throw new Error( @@ -153,6 +155,8 @@ export function disable_hash(url) { * @param {URL} url */ export function disable_search(url) { + allow_nodejs_console_log(url); + for (const property of ['search', 'searchParams']) { Object.defineProperty(url, property, { get() { @@ -162,6 +166,19 @@ export function disable_search(url) { } } +/** + * Allow URL to be console logged, bypassing disabled properties. + * @param {URL} url + */ +function allow_nodejs_console_log(url) { + if (!BROWSER) { + // @ts-ignore + url[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => { + return inspect(new URL(url), opts); + }; + } +} + const DATA_SUFFIX = '/__data.json'; /** @param {string} pathname */ diff --git a/packages/kit/test/apps/basics/src/routes/prerendering/log-url/+page.js b/packages/kit/test/apps/basics/src/routes/prerendering/log-url/+page.js new file mode 100644 index 000000000000..189f71e2e1b3 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/prerendering/log-url/+page.js @@ -0,0 +1 @@ +export const prerender = true; diff --git a/packages/kit/test/apps/basics/src/routes/prerendering/log-url/+page.svelte b/packages/kit/test/apps/basics/src/routes/prerendering/log-url/+page.svelte new file mode 100644 index 000000000000..9ab1b1102a8b --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/prerendering/log-url/+page.svelte @@ -0,0 +1,13 @@ + + +

error: {error}

diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index e4a4af7514a8..79bcd7c6f89a 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -509,6 +509,12 @@ test.describe('Load', () => { '{"message":"Im prerendered and called from a non-prerendered +page.server.js"}' ); }); + + test('Logging $page.url during prerendering works', async ({ page }) => { + await page.goto('/prerendering/log-url'); + + expect(await page.textContent('p')).toBe('error: false'); + }); }); test.describe('Nested layouts', () => {