diff --git a/.changeset/fluffy-actors-float.md b/.changeset/fluffy-actors-float.md new file mode 100644 index 000000000000..b36ce1cf2f62 --- /dev/null +++ b/.changeset/fluffy-actors-float.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +chore: more compact representation for invalidated search param diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 0e05ded0a3a0..1ab1fce16087 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -33,7 +33,7 @@ import * as devalue from 'devalue'; import { INDEX_KEY, PRELOAD_PRIORITIES, SCROLL_KEY, SNAPSHOT_KEY } from './constants.js'; import { validate_common_exports } from '../../utils/exports.js'; import { compact } from '../../utils/array.js'; -import { validate_depends } from '../shared.js'; +import { INVALIDATED_PARAM, validate_depends } from '../shared.js'; let errored = false; @@ -1772,13 +1772,10 @@ export function create_client(app, target) { async function load_data(url, invalid) { const data_url = new URL(url); data_url.pathname = add_data_suffix(url.pathname); - if (DEV && url.searchParams.has('x-sveltekit-invalidated')) { - throw new Error('Cannot used reserved query parameter "x-sveltekit-invalidated"'); + if (DEV && url.searchParams.has(INVALIDATED_PARAM)) { + throw new Error(`Cannot used reserved query parameter "${INVALIDATED_PARAM}"`); } - data_url.searchParams.append( - 'x-sveltekit-invalidated', - invalid.map((x) => (x ? '1' : '')).join('_') - ); + data_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => (i ? '1' : '0')).join('')); const res = await native_fetch(data_url.href); diff --git a/packages/kit/src/runtime/server/data/index.js b/packages/kit/src/runtime/server/data/index.js index 8d7b14851d83..1fbec114a26d 100644 --- a/packages/kit/src/runtime/server/data/index.js +++ b/packages/kit/src/runtime/server/data/index.js @@ -8,8 +8,6 @@ import { text } from '../../../exports/index.js'; import * as devalue from 'devalue'; import { create_async_iterator } from '../../../utils/streaming.js'; -export const INVALIDATED_PARAM = 'x-sveltekit-invalidated'; - const encoder = new TextEncoder(); /** diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index ada5b05cf85e..ced8db6363fe 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -15,7 +15,7 @@ import { strip_data_suffix } from '../../utils/url.js'; import { exec } from '../../utils/routing.js'; -import { INVALIDATED_PARAM, redirect_json_response, render_data } from './data/index.js'; +import { redirect_json_response, render_data } from './data/index.js'; import { add_cookies_to_headers, get_cookies } from './cookie.js'; import { create_fetch } from './fetch.js'; import { Redirect } from '../control.js'; @@ -27,6 +27,7 @@ import { import { get_option } from '../../utils/options.js'; import { error, json, text } from '../../exports/index.js'; import { action_json_redirect, is_action_json_request } from './page/actions.js'; +import { INVALIDATED_PARAM } from '../shared.js'; /* global __SVELTEKIT_ADAPTER_NAME__ */ @@ -94,7 +95,10 @@ export async function respond(request, options, manifest, state) { if (is_data_request) { decoded = strip_data_suffix(decoded) || '/'; url.pathname = strip_data_suffix(url.pathname) || '/'; - invalidated_data_nodes = url.searchParams.get(INVALIDATED_PARAM)?.split('_').map(Boolean); + invalidated_data_nodes = url.searchParams + .get(INVALIDATED_PARAM) + ?.split('') + .map((node) => node === '1'); url.searchParams.delete(INVALIDATED_PARAM); } diff --git a/packages/kit/src/runtime/shared.js b/packages/kit/src/runtime/shared.js index 563b081978f6..d8f60e7b71c9 100644 --- a/packages/kit/src/runtime/shared.js +++ b/packages/kit/src/runtime/shared.js @@ -10,3 +10,5 @@ export function validate_depends(route_id, dep) { ); } } + +export const INVALIDATED_PARAM = 'x-sveltekit-invalidated'; diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index 127f85dbed5b..efb305e6727d 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -24,7 +24,7 @@ test.describe('Caching', () => { const [, response] = await Promise.all([ app.goto('/caching/server-data'), page.waitForResponse((request) => - request.url().endsWith('server-data/__data.json?x-sveltekit-invalidated=_1') + request.url().endsWith('server-data/__data.json?x-sveltekit-invalidated=01') ) ]); expect(response.headers()['cache-control']).toBe('public, max-age=30'); diff --git a/packages/kit/test/apps/basics/test/cross-platform/test.js b/packages/kit/test/apps/basics/test/cross-platform/test.js index fa2e3dd736f8..2042d5b42f29 100644 --- a/packages/kit/test/apps/basics/test/cross-platform/test.js +++ b/packages/kit/test/apps/basics/test/cross-platform/test.js @@ -595,7 +595,7 @@ test.describe('Redirects', () => { const [, response] = await Promise.all([ app.goto('/redirect/in-handle?throw&cookies'), page.waitForResponse((request) => - request.url().endsWith('in-handle/__data.json?throw=&cookies=&x-sveltekit-invalidated=_1') + request.url().endsWith('in-handle/__data.json?throw=&cookies=&x-sveltekit-invalidated=01') ) ]); expect((await response.allHeaders())['set-cookie']).toBeDefined();