Skip to content

Commit c07ab35

Browse files
committed
fix(sveltekit): Avoid data invalidation in wrapped client-side load functions
1 parent 469881d commit c07ab35

File tree

1 file changed

+11
-1
lines changed
  • packages/sveltekit/src/client

1 file changed

+11
-1
lines changed

packages/sveltekit/src/client/load.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,17 @@ export function wrapLoadWithSentry<T extends (...args: any) => any>(origLoad: T)
7171

7272
addNonEnumerableProperty(patchedEvent as unknown as Record<string, unknown>, '__sentry_wrapped__', true);
7373

74-
const routeId = event.route.id;
74+
// Accessing any member of `event.route` causes SvelteKit to invalidate the
75+
// client-side universal `load` function's data prefetched data, causing another reload on the actual navigation.
76+
// To work around this, we use `Object.getOwnPropertyDescriptor` which doesn't invoke the proxy.
77+
const routeIdDescriptor = event.route && Object.getOwnPropertyDescriptor(event.route, 'id');
78+
// First, we try to access the route id from the property descriptor.
79+
// This will only work for @sveltejs/kit >= 1.24.0
80+
const routeIdFromDescriptor = routeIdDescriptor && (routeIdDescriptor.value as string | undefined);
81+
// If routeIdFromDescriptor is undefined, we fall back to the old behavior of accessing
82+
// `event.route.id` directly. This will still cause invalidations but we get a route name.
83+
const routeId = routeIdFromDescriptor || event.route.id;
84+
7585
return trace(
7686
{
7787
op: 'function.sveltekit.load',

0 commit comments

Comments
 (0)