From a40c7d2542637be2c446661b44c957f9da4cf3a4 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Wed, 19 Apr 2023 11:37:54 +0545 Subject: [PATCH 1/3] chore: more compact invalidated query param --- .changeset/fluffy-actors-float.md | 5 +++++ packages/kit/src/runtime/client/client.js | 2 +- packages/kit/src/runtime/server/respond.js | 5 ++++- packages/kit/test/apps/basics/test/client.test.js | 2 +- packages/kit/test/apps/basics/test/cross-platform/test.js | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 .changeset/fluffy-actors-float.md 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..354d7bb58bb9 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -1777,7 +1777,7 @@ async function load_data(url, invalid) { } data_url.searchParams.append( 'x-sveltekit-invalidated', - invalid.map((x) => (x ? '1' : '')).join('_') + invalid.map((i) => (i ? '1' : '0')).join('') ); const res = await native_fetch(data_url.href); diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index ada5b05cf85e..7c677012e516 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -94,7 +94,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/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(); From 90aa035370461aa1b907faaaece24140fc5ed554 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Wed, 19 Apr 2023 12:08:46 +0545 Subject: [PATCH 2/3] share param const between client and server --- packages/kit/src/runtime/client/client.js | 11 ++++------- packages/kit/src/runtime/server/data/index.js | 2 -- packages/kit/src/runtime/server/respond.js | 3 ++- packages/kit/src/runtime/shared.js | 2 ++ 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 354d7bb58bb9..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((i) => (i ? '1' : '0')).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 7c677012e516..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__ */ diff --git a/packages/kit/src/runtime/shared.js b/packages/kit/src/runtime/shared.js index 563b081978f6..6ec25204f249 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'; \ No newline at end of file From 6daea9de41074079f6158ac5f68db530130e24c6 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Wed, 19 Apr 2023 12:12:06 +0545 Subject: [PATCH 3/3] missing newline --- packages/kit/src/runtime/shared.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/shared.js b/packages/kit/src/runtime/shared.js index 6ec25204f249..d8f60e7b71c9 100644 --- a/packages/kit/src/runtime/shared.js +++ b/packages/kit/src/runtime/shared.js @@ -11,4 +11,4 @@ export function validate_depends(route_id, dep) { } } -export const INVALIDATED_PARAM = 'x-sveltekit-invalidated'; \ No newline at end of file +export const INVALIDATED_PARAM = 'x-sveltekit-invalidated';