Skip to content

Commit 02be6a7

Browse files
committed
add server-side handleLoad
1 parent 183681d commit 02be6a7

File tree

8 files changed

+20
-10
lines changed

8 files changed

+20
-10
lines changed

packages/kit/src/runtime/server/ambient.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ declare module '__SERVER__/internal.js' {
44
handle?: import('types').Handle;
55
handleError?: import('types').HandleServerError;
66
handleFetch?: import('types').HandleFetch;
7+
handleLoad?: import('types').HandleLoad;
78
}>;
89
}

packages/kit/src/runtime/server/data/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export async function render_data(
7878
}
7979
}
8080
return data;
81-
}
81+
},
8282
});
8383
} catch (e) {
8484
aborted = true;

packages/kit/src/runtime/server/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ export class Server {
4141
handle: module.handle || (({ event, resolve }) => resolve(event)),
4242
// @ts-expect-error
4343
handleError: module.handleError || (({ error }) => console.error(error?.stack)),
44-
handleFetch: module.handleFetch || (({ request, fetch }) => fetch(request))
44+
handleFetch: module.handleFetch || (({ request, fetch }) => fetch(request)),
45+
handleLoad: module.handleLoad || (({event, resolve}) => resolve(event))
4546
};
4647
}
4748
}

packages/kit/src/runtime/server/page/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export async function render_page(event, page, options, manifest, state, resolve
150150
if (parent) Object.assign(data, await parent.data);
151151
}
152152
return data;
153-
}
153+
},
154154
});
155155
} catch (e) {
156156
load_error = /** @type {Error} */ (e);
@@ -180,7 +180,8 @@ export async function render_page(event, page, options, manifest, state, resolve
180180
resolve_opts,
181181
server_data_promise: server_promises[i],
182182
state,
183-
csr
183+
csr,
184+
handleLoad: options.hooks.handleLoad,
184185
});
185186
} catch (e) {
186187
load_error = /** @type {Error} */ (e);

packages/kit/src/runtime/server/page/load_data.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ export async function load_server_data({ event, state, node, parent }) {
140140
* server_data_promise: Promise<import('types').ServerDataNode | null>;
141141
* state: import('types').SSRState;
142142
* csr: boolean;
143+
* handleLoad: import('types').HandleLoad;
143144
* }} opts
144145
* @returns {Promise<Record<string, any | Promise<any>> | null>}
145146
*/
@@ -151,24 +152,27 @@ export async function load_data({
151152
server_data_promise,
152153
state,
153154
resolve_opts,
154-
csr
155+
csr,
156+
handleLoad
155157
}) {
156158
const server_data_node = await server_data_promise;
157159

158160
if (!node?.universal?.load) {
159161
return server_data_node?.data ?? null;
160162
}
161163

162-
const result = await node.universal.load.call(null, {
164+
const load_event = {
163165
url: event.url,
164166
params: event.params,
165167
data: server_data_node?.data ?? null,
166168
route: event.route,
167169
fetch: create_universal_fetch(event, state, fetched, csr, resolve_opts),
168170
setHeaders: event.setHeaders,
169-
depends: () => {},
171+
depends: () => { },
170172
parent
171-
});
173+
};
174+
175+
const result = await handleLoad({event: load_event, resolve: node.universal.load});
172176

173177
const data = result ? await unwrap_promises(result) : null;
174178
if (__SVELTEKIT_DEV__) {

packages/kit/src/runtime/server/page/respond_with_error.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export async function respond_with_error({
4444
event,
4545
state,
4646
node: default_layout,
47-
parent: async () => ({})
47+
parent: async () => ({}),
4848
});
4949

5050
const server_data = await server_data_promise;
@@ -57,7 +57,8 @@ export async function respond_with_error({
5757
resolve_opts,
5858
server_data_promise,
5959
state,
60-
csr
60+
csr,
61+
handleLoad: options.hooks.handleLoad,
6162
});
6263

6364
branch.push(

packages/kit/types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ export interface HandleLoad {
642642
(input: { event: LoadEvent; resolve: Load }): ReturnType<Load>;
643643
}
644644

645+
645646
/**
646647
* The [`handleFetch`](https://kit.svelte.dev/docs/hooks#server-hooks-handlefetch) hook allows you to modify (or replace) a `fetch` request that happens inside a `load` function that runs on the server (or during pre-rendering)
647648
*/

packages/kit/types/internal.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export interface ServerHooks {
9595
handleFetch: HandleFetch;
9696
handle: Handle;
9797
handleError: HandleServerError;
98+
handleLoad: HandleLoad;
9899
}
99100

100101
export interface ClientHooks {

0 commit comments

Comments
 (0)