Skip to content

Commit 09d0961

Browse files
authored
fix: fall back to non-relative resolution when calling resolve(...) outside an event context (#14532)
* fix: fall back to non-relative resolution when calling `resolve(...)` outside an event context * lint
1 parent abc9887 commit 09d0961

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

.changeset/common-llamas-argue.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix: fall back to non-relative resolution when calling `resolve(...)` outside an event context
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { base, assets, relative } from './internal/server.js';
22
import { resolve_route } from '../../../utils/routing.js';
3-
import { get_request_store } from '@sveltejs/kit/internal/server';
3+
import { try_get_request_store } from '@sveltejs/kit/internal/server';
44

55
/** @type {import('./client.js').asset} */
66
export function asset(file) {
@@ -13,19 +13,17 @@ export function resolve(id, params) {
1313
const resolved = resolve_route(id, /** @type {Record<string, string>} */ (params));
1414

1515
if (relative) {
16-
const { event, state } = get_request_store();
16+
const store = try_get_request_store();
1717

18-
if (state.prerendering?.fallback) {
19-
return resolved;
20-
}
21-
22-
const segments = event.url.pathname.slice(base.length).split('/').slice(2);
23-
const prefix = segments.map(() => '..').join('/') || '.';
18+
if (store && !store.state.prerendering?.fallback) {
19+
const segments = store.event.url.pathname.slice(base.length).split('/').slice(2);
20+
const prefix = segments.map(() => '..').join('/') || '.';
2421

25-
return prefix + resolved;
22+
return prefix + resolved;
23+
}
2624
}
2725

28-
return resolved;
26+
return base + resolved;
2927
}
3028

3129
export { base, assets, resolve as resolveRoute };

packages/kit/test/apps/basics/src/hooks.server.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import fs from 'node:fs';
55
import { COOKIE_NAME } from './routes/cookies/shared';
66
import { _set_from_init } from './routes/init-hooks/+page.server';
77
import { getRequestEvent } from '$app/server';
8+
import { resolve } from '$app/paths';
89

910
// @ts-ignore this doesn't exist in old Node
1011
Promise.withResolvers ??= () => {
@@ -16,6 +17,9 @@ Promise.withResolvers ??= () => {
1617
return d;
1718
};
1819

20+
// check that this doesn't throw when called outside an event context
21+
resolve('/');
22+
1923
/**
2024
* Transform an error into a POJO, by copying its `name`, `message`
2125
* and (in dev) `stack`, plus any custom properties, plus recursively

0 commit comments

Comments
 (0)