@sveltejs/kit 2.2.2 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/core/config/index.js +1 -0
- package/src/core/config/options.js +2 -1
- package/src/core/sync/write_client_manifest.js +15 -3
- package/src/core/sync/write_server.js +13 -6
- package/src/exports/node/index.js +9 -5
- package/src/exports/public.d.ts +12 -0
- package/src/exports/vite/index.js +9 -3
- package/src/runtime/client/client.js +29 -5
- package/src/runtime/server/ambient.d.ts +1 -5
- package/src/runtime/server/index.js +4 -2
- package/src/runtime/server/respond.js +11 -1
- package/src/types/internal.d.ts +4 -1
- package/src/version.js +1 -1
- package/types/index.d.ts +13 -1
- package/types/index.d.ts.map +2 -1
package/package.json
CHANGED
package/src/core/config/index.js
CHANGED
|
@@ -93,6 +93,7 @@ function process_config(config, { cwd = process.cwd() } = {}) {
|
|
|
93
93
|
if (key === 'hooks') {
|
|
94
94
|
validated.kit.files.hooks.client = path.resolve(cwd, validated.kit.files.hooks.client);
|
|
95
95
|
validated.kit.files.hooks.server = path.resolve(cwd, validated.kit.files.hooks.server);
|
|
96
|
+
validated.kit.files.hooks.universal = path.resolve(cwd, validated.kit.files.hooks.universal);
|
|
96
97
|
} else {
|
|
97
98
|
// @ts-expect-error
|
|
98
99
|
validated.kit.files[key] = path.resolve(cwd, validated.kit.files[key]);
|
|
@@ -123,7 +123,8 @@ const options = object(
|
|
|
123
123
|
assets: string('static'),
|
|
124
124
|
hooks: object({
|
|
125
125
|
client: string(join('src', 'hooks.client')),
|
|
126
|
-
server: string(join('src', 'hooks.server'))
|
|
126
|
+
server: string(join('src', 'hooks.server')),
|
|
127
|
+
universal: string(join('src', 'hooks'))
|
|
127
128
|
}),
|
|
128
129
|
lib: string(join('src', 'lib')),
|
|
129
130
|
params: string(join('src', 'params')),
|
|
@@ -108,7 +108,8 @@ export function write_client_manifest(kit, manifest_data, output, metadata) {
|
|
|
108
108
|
}
|
|
109
109
|
`;
|
|
110
110
|
|
|
111
|
-
const
|
|
111
|
+
const client_hooks_file = resolve_entry(kit.files.hooks.client);
|
|
112
|
+
const universal_hooks_file = resolve_entry(kit.files.hooks.universal);
|
|
112
113
|
|
|
113
114
|
const typo = resolve_entry('src/+hooks.client');
|
|
114
115
|
if (typo) {
|
|
@@ -125,7 +126,16 @@ export function write_client_manifest(kit, manifest_data, output, metadata) {
|
|
|
125
126
|
write_if_changed(
|
|
126
127
|
`${output}/app.js`,
|
|
127
128
|
dedent`
|
|
128
|
-
${
|
|
129
|
+
${
|
|
130
|
+
client_hooks_file
|
|
131
|
+
? `import * as client_hooks from '${relative_path(output, client_hooks_file)}';`
|
|
132
|
+
: ''
|
|
133
|
+
}
|
|
134
|
+
${
|
|
135
|
+
universal_hooks_file
|
|
136
|
+
? `import * as universal_hooks from '${relative_path(output, universal_hooks_file)}';`
|
|
137
|
+
: ''
|
|
138
|
+
}
|
|
129
139
|
|
|
130
140
|
export { matchers } from './matchers.js';
|
|
131
141
|
|
|
@@ -139,8 +149,10 @@ export function write_client_manifest(kit, manifest_data, output, metadata) {
|
|
|
139
149
|
|
|
140
150
|
export const hooks = {
|
|
141
151
|
handleError: ${
|
|
142
|
-
|
|
152
|
+
client_hooks_file ? 'client_hooks.handleError || ' : ''
|
|
143
153
|
}(({ error }) => { console.error(error) }),
|
|
154
|
+
|
|
155
|
+
reroute: ${universal_hooks_file ? 'universal_hooks.reroute || ' : ''}(() => {})
|
|
144
156
|
};
|
|
145
157
|
|
|
146
158
|
export { default as root } from '../root.${isSvelte5Plus() ? 'js' : 'svelte'}';
|
|
@@ -9,7 +9,8 @@ import colors from 'kleur';
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* @param {{
|
|
12
|
-
*
|
|
12
|
+
* server_hooks: string | null;
|
|
13
|
+
* universal_hooks: string | null;
|
|
13
14
|
* config: import('types').ValidatedConfig;
|
|
14
15
|
* has_service_worker: boolean;
|
|
15
16
|
* runtime_directory: string;
|
|
@@ -19,7 +20,8 @@ import colors from 'kleur';
|
|
|
19
20
|
*/
|
|
20
21
|
const server_template = ({
|
|
21
22
|
config,
|
|
22
|
-
|
|
23
|
+
server_hooks,
|
|
24
|
+
universal_hooks,
|
|
23
25
|
has_service_worker,
|
|
24
26
|
runtime_directory,
|
|
25
27
|
template,
|
|
@@ -59,8 +61,11 @@ export const options = {
|
|
|
59
61
|
version_hash: ${s(hash(config.kit.version.name))}
|
|
60
62
|
};
|
|
61
63
|
|
|
62
|
-
export function get_hooks() {
|
|
63
|
-
return
|
|
64
|
+
export async function get_hooks() {
|
|
65
|
+
return {
|
|
66
|
+
${server_hooks ? `...(await import(${s(server_hooks)})),` : ''}
|
|
67
|
+
${universal_hooks ? `...(await import(${s(universal_hooks)})),` : ''}
|
|
68
|
+
};
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
export { set_assets, set_building, set_prerendering, set_private_env, set_public_env, set_safe_public_env };
|
|
@@ -76,7 +81,8 @@ export { set_assets, set_building, set_prerendering, set_private_env, set_public
|
|
|
76
81
|
* @param {string} output
|
|
77
82
|
*/
|
|
78
83
|
export function write_server(config, output) {
|
|
79
|
-
const
|
|
84
|
+
const server_hooks_file = resolve_entry(config.kit.files.hooks.server);
|
|
85
|
+
const universal_hooks_file = resolve_entry(config.kit.files.hooks.universal);
|
|
80
86
|
|
|
81
87
|
const typo = resolve_entry('src/+hooks.server');
|
|
82
88
|
if (typo) {
|
|
@@ -99,7 +105,8 @@ export function write_server(config, output) {
|
|
|
99
105
|
`${output}/server/internal.js`,
|
|
100
106
|
server_template({
|
|
101
107
|
config,
|
|
102
|
-
|
|
108
|
+
server_hooks: server_hooks_file ? relative(server_hooks_file) : null,
|
|
109
|
+
universal_hooks: universal_hooks_file ? relative(universal_hooks_file) : null,
|
|
103
110
|
has_service_worker:
|
|
104
111
|
config.kit.serviceWorker.register && !!resolve_entry(config.kit.files.serviceWorker),
|
|
105
112
|
runtime_directory: relative(runtime_directory),
|
|
@@ -34,11 +34,15 @@ function get_raw_body(req, body_size_limit) {
|
|
|
34
34
|
return new ReadableStream({
|
|
35
35
|
start(controller) {
|
|
36
36
|
if (body_size_limit !== undefined && content_length > body_size_limit) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
let message = `Content-length of ${content_length} exceeds limit of ${body_size_limit} bytes.`;
|
|
38
|
+
|
|
39
|
+
if (body_size_limit === 0) {
|
|
40
|
+
// https://github.com/sveltejs/kit/pull/11589
|
|
41
|
+
// TODO this exists to aid migration — remove in a future version
|
|
42
|
+
message += ' To disable body size limits, specify Infinity rather than 0.';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const error = new SvelteKitError(413, 'Payload Too Large', message);
|
|
42
46
|
|
|
43
47
|
controller.error(error);
|
|
44
48
|
return;
|
package/src/exports/public.d.ts
CHANGED
|
@@ -394,6 +394,12 @@ export interface KitConfig {
|
|
|
394
394
|
* @default "src/hooks.server"
|
|
395
395
|
*/
|
|
396
396
|
server?: string;
|
|
397
|
+
/**
|
|
398
|
+
* The location of your universal [hooks](https://kit.svelte.dev/docs/hooks).
|
|
399
|
+
* @default "src/hooks"
|
|
400
|
+
* @since 2.3.0
|
|
401
|
+
*/
|
|
402
|
+
universal?: string;
|
|
397
403
|
};
|
|
398
404
|
/**
|
|
399
405
|
* your app's internal library, accessible throughout the codebase as `$lib`
|
|
@@ -683,6 +689,12 @@ export type HandleFetch = (input: {
|
|
|
683
689
|
fetch: typeof fetch;
|
|
684
690
|
}) => MaybePromise<Response>;
|
|
685
691
|
|
|
692
|
+
/**
|
|
693
|
+
* The [`reroute`](https://kit.svelte.dev/docs/hooks#universal-hooks-reroute) hook allows you to modify the URL before it is used to determine which route to render.
|
|
694
|
+
* @since 2.3.0
|
|
695
|
+
*/
|
|
696
|
+
export type Reroute = (event: { url: URL }) => void | string;
|
|
697
|
+
|
|
686
698
|
/**
|
|
687
699
|
* The generic form of `PageLoad` and `LayoutLoad`. You should import those from `./$types` (see [generated types](https://kit.svelte.dev/docs/types#generated-types))
|
|
688
700
|
* rather than using `Load` directly.
|
|
@@ -128,9 +128,15 @@ const warning_preprocessor = {
|
|
|
128
128
|
* @param {string} dependency
|
|
129
129
|
*/
|
|
130
130
|
async function resolve_peer_dependency(dependency) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
try {
|
|
132
|
+
// @ts-expect-error the types are wrong
|
|
133
|
+
const resolved = await imr.resolve(dependency, pathToFileURL(process.cwd() + '/dummy.js'));
|
|
134
|
+
return import(resolved);
|
|
135
|
+
} catch (e) {
|
|
136
|
+
throw new Error(
|
|
137
|
+
`Could not resolve peer dependency "${dependency}" relative to your project — please install it and try again.`
|
|
138
|
+
);
|
|
139
|
+
}
|
|
134
140
|
}
|
|
135
141
|
|
|
136
142
|
/**
|
|
@@ -1082,13 +1082,31 @@ async function load_root_error_page({ status, error, url, route }) {
|
|
|
1082
1082
|
}
|
|
1083
1083
|
|
|
1084
1084
|
/**
|
|
1085
|
-
* @param {URL} url
|
|
1085
|
+
* @param {URL | undefined} url
|
|
1086
1086
|
* @param {boolean} invalidating
|
|
1087
1087
|
*/
|
|
1088
1088
|
function get_navigation_intent(url, invalidating) {
|
|
1089
|
+
if (!url) return undefined;
|
|
1089
1090
|
if (is_external_url(url, base)) return;
|
|
1090
1091
|
|
|
1091
|
-
|
|
1092
|
+
// reroute could alter the given URL, so we pass a copy
|
|
1093
|
+
let rerouted;
|
|
1094
|
+
try {
|
|
1095
|
+
rerouted = app.hooks.reroute({ url: new URL(url) }) ?? url.pathname;
|
|
1096
|
+
} catch (e) {
|
|
1097
|
+
if (DEV) {
|
|
1098
|
+
// in development, print the error...
|
|
1099
|
+
console.error(e);
|
|
1100
|
+
|
|
1101
|
+
// ...and pause execution, since otherwise we will immediately reload the page
|
|
1102
|
+
debugger; // eslint-disable-line
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
// fall back to native navigation
|
|
1106
|
+
return undefined;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
const path = get_url_path(rerouted);
|
|
1092
1110
|
|
|
1093
1111
|
for (const route of routes) {
|
|
1094
1112
|
const params = route.exec(path);
|
|
@@ -1096,7 +1114,13 @@ function get_navigation_intent(url, invalidating) {
|
|
|
1096
1114
|
if (params) {
|
|
1097
1115
|
const id = url.pathname + url.search;
|
|
1098
1116
|
/** @type {import('./types.js').NavigationIntent} */
|
|
1099
|
-
const intent = {
|
|
1117
|
+
const intent = {
|
|
1118
|
+
id,
|
|
1119
|
+
invalidating,
|
|
1120
|
+
route,
|
|
1121
|
+
params: decode_params(params),
|
|
1122
|
+
url
|
|
1123
|
+
};
|
|
1100
1124
|
return intent;
|
|
1101
1125
|
}
|
|
1102
1126
|
}
|
|
@@ -1462,7 +1486,7 @@ function setup_preload() {
|
|
|
1462
1486
|
|
|
1463
1487
|
if (!options.reload) {
|
|
1464
1488
|
if (priority <= options.preload_data) {
|
|
1465
|
-
const intent = get_navigation_intent(
|
|
1489
|
+
const intent = get_navigation_intent(url, false);
|
|
1466
1490
|
if (intent) {
|
|
1467
1491
|
if (DEV) {
|
|
1468
1492
|
_preload_data(intent).then((result) => {
|
|
@@ -1584,7 +1608,7 @@ export function beforeNavigate(callback) {
|
|
|
1584
1608
|
* If a function (or a `Promise` that resolves to a function) is returned from the callback, it will be called once the DOM has updated.
|
|
1585
1609
|
*
|
|
1586
1610
|
* `onNavigate` must be called during a component initialization. It remains active as long as the component is mounted.
|
|
1587
|
-
* @param {(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<void>} callback
|
|
1611
|
+
* @param {(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>} callback
|
|
1588
1612
|
* @returns {void}
|
|
1589
1613
|
*/
|
|
1590
1614
|
export function onNavigate(callback) {
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
declare module '__SERVER__/internal.js' {
|
|
2
2
|
export const options: import('types').SSROptions;
|
|
3
|
-
export const get_hooks: () => Promise<
|
|
4
|
-
handle?: import('@sveltejs/kit').Handle;
|
|
5
|
-
handleError?: import('@sveltejs/kit').HandleServerError;
|
|
6
|
-
handleFetch?: import('@sveltejs/kit').HandleFetch;
|
|
7
|
-
}>;
|
|
3
|
+
export const get_hooks: () => Promise<Partial<import('types').ServerHooks>>;
|
|
8
4
|
}
|
|
@@ -62,7 +62,8 @@ export class Server {
|
|
|
62
62
|
this.#options.hooks = {
|
|
63
63
|
handle: module.handle || (({ event, resolve }) => resolve(event)),
|
|
64
64
|
handleError: module.handleError || (({ error }) => console.error(error)),
|
|
65
|
-
handleFetch: module.handleFetch || (({ request, fetch }) => fetch(request))
|
|
65
|
+
handleFetch: module.handleFetch || (({ request, fetch }) => fetch(request)),
|
|
66
|
+
reroute: module.reroute || (() => {})
|
|
66
67
|
};
|
|
67
68
|
} catch (error) {
|
|
68
69
|
if (DEV) {
|
|
@@ -71,7 +72,8 @@ export class Server {
|
|
|
71
72
|
throw error;
|
|
72
73
|
},
|
|
73
74
|
handleError: ({ error }) => console.error(error),
|
|
74
|
-
handleFetch: ({ request, fetch }) => fetch(request)
|
|
75
|
+
handleFetch: ({ request, fetch }) => fetch(request),
|
|
76
|
+
reroute: () => {}
|
|
75
77
|
};
|
|
76
78
|
} else {
|
|
77
79
|
throw error;
|
|
@@ -79,9 +79,19 @@ export async function respond(request, options, manifest, state) {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
// reroute could alter the given URL, so we pass a copy
|
|
83
|
+
let rerouted_path;
|
|
84
|
+
try {
|
|
85
|
+
rerouted_path = options.hooks.reroute({ url: new URL(url) }) ?? url.pathname;
|
|
86
|
+
} catch (e) {
|
|
87
|
+
return text('Internal Server Error', {
|
|
88
|
+
status: 500
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
82
92
|
let decoded;
|
|
83
93
|
try {
|
|
84
|
-
decoded = decode_pathname(
|
|
94
|
+
decoded = decode_pathname(rerouted_path);
|
|
85
95
|
} catch {
|
|
86
96
|
return text('Malformed URI', { status: 400 });
|
|
87
97
|
}
|
package/src/types/internal.d.ts
CHANGED
|
@@ -12,7 +12,8 @@ import {
|
|
|
12
12
|
ServerInitOptions,
|
|
13
13
|
HandleFetch,
|
|
14
14
|
Actions,
|
|
15
|
-
HandleClientError
|
|
15
|
+
HandleClientError,
|
|
16
|
+
Reroute
|
|
16
17
|
} from '@sveltejs/kit';
|
|
17
18
|
import {
|
|
18
19
|
HttpMethod,
|
|
@@ -99,10 +100,12 @@ export interface ServerHooks {
|
|
|
99
100
|
handleFetch: HandleFetch;
|
|
100
101
|
handle: Handle;
|
|
101
102
|
handleError: HandleServerError;
|
|
103
|
+
reroute: Reroute;
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
export interface ClientHooks {
|
|
105
107
|
handleError: HandleClientError;
|
|
108
|
+
reroute: Reroute;
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
export interface Env {
|
package/src/version.js
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -376,6 +376,12 @@ declare module '@sveltejs/kit' {
|
|
|
376
376
|
* @default "src/hooks.server"
|
|
377
377
|
*/
|
|
378
378
|
server?: string;
|
|
379
|
+
/**
|
|
380
|
+
* The location of your universal [hooks](https://kit.svelte.dev/docs/hooks).
|
|
381
|
+
* @default "src/hooks"
|
|
382
|
+
* @since 2.3.0
|
|
383
|
+
*/
|
|
384
|
+
universal?: string;
|
|
379
385
|
};
|
|
380
386
|
/**
|
|
381
387
|
* your app's internal library, accessible throughout the codebase as `$lib`
|
|
@@ -665,6 +671,12 @@ declare module '@sveltejs/kit' {
|
|
|
665
671
|
fetch: typeof fetch;
|
|
666
672
|
}) => MaybePromise<Response>;
|
|
667
673
|
|
|
674
|
+
/**
|
|
675
|
+
* The [`reroute`](https://kit.svelte.dev/docs/hooks#universal-hooks-reroute) hook allows you to modify the URL before it is used to determine which route to render.
|
|
676
|
+
* @since 2.3.0
|
|
677
|
+
*/
|
|
678
|
+
export type Reroute = (event: { url: URL }) => void | string;
|
|
679
|
+
|
|
668
680
|
/**
|
|
669
681
|
* The generic form of `PageLoad` and `LayoutLoad`. You should import those from `./$types` (see [generated types](https://kit.svelte.dev/docs/types#generated-types))
|
|
670
682
|
* rather than using `Load` directly.
|
|
@@ -1969,7 +1981,7 @@ declare module '$app/navigation' {
|
|
|
1969
1981
|
*
|
|
1970
1982
|
* `onNavigate` must be called during a component initialization. It remains active as long as the component is mounted.
|
|
1971
1983
|
* */
|
|
1972
|
-
export function onNavigate(callback: (navigation: import('@sveltejs/kit').OnNavigate) => MaybePromise<void>): void;
|
|
1984
|
+
export function onNavigate(callback: (navigation: import('@sveltejs/kit').OnNavigate) => MaybePromise<(() => void) | void>): void;
|
|
1973
1985
|
/**
|
|
1974
1986
|
* If called when the page is being updated following a navigation (in `onMount` or `afterNavigate` or an action, for example), this disables SvelteKit's built-in scroll handling.
|
|
1975
1987
|
* This is generally discouraged, since it breaks user expectations.
|
package/types/index.d.ts.map
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"HandleServerError",
|
|
15
15
|
"HandleClientError",
|
|
16
16
|
"HandleFetch",
|
|
17
|
+
"Reroute",
|
|
17
18
|
"Load",
|
|
18
19
|
"LoadEvent",
|
|
19
20
|
"NavigationEvent",
|
|
@@ -143,5 +144,5 @@
|
|
|
143
144
|
null,
|
|
144
145
|
null
|
|
145
146
|
],
|
|
146
|
-
"mappings": ";;;;;;;;;kBA2BiBA,OAAOA;;;;;;;;;;;;aAYZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;;;;;;;;kBAeTC,aAAaA;;;;;;;;;;;;;;;;kBAgBbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4FPC,MAAMA;;;;;;;;;;;;;;;;;;;;;kBAqBNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyDPC,SAASA
|
|
147
|
+
"mappings": "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"
|
|
147
148
|
}
|