@sveltejs/kit 2.2.1 → 2.3.0
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/public.d.ts +12 -0
- package/src/runtime/client/client.js +28 -4
- package/src/runtime/server/ambient.d.ts +1 -5
- package/src/runtime/server/index.js +4 -2
- package/src/runtime/server/page/csp.js +1 -1
- 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 +12 -0
- 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),
|
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.
|
|
@@ -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) => {
|
|
@@ -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;
|
|
@@ -194,7 +194,7 @@ class BaseProvider {
|
|
|
194
194
|
this.#style_src_elem.push(`sha256-${hash}`);
|
|
195
195
|
}
|
|
196
196
|
} else {
|
|
197
|
-
if (this.#style_src.length === 0) {
|
|
197
|
+
if (this.#style_src.length === 0 && !d['style-src']?.includes('unsafe-inline')) {
|
|
198
198
|
this.#style_src.push(`nonce-${this.#nonce}`);
|
|
199
199
|
}
|
|
200
200
|
if (d['style-src-attr']?.length) {
|
|
@@ -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.
|
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
|
}
|