@sveltejs/kit 2.0.6 → 2.0.8
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 +2 -1
- package/src/exports/public.d.ts +0 -8
- package/src/exports/vite/index.js +20 -5
- package/src/runtime/client/client.js +14 -3
- package/src/runtime/server/page/csp.js +97 -17
- package/src/version.js +1 -1
- package/types/index.d.ts +0 -8
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sveltejs/kit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.8",
|
|
4
4
|
"description": "The fastest way to build Svelte apps",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"cookie": "^0.6.0",
|
|
16
16
|
"devalue": "^4.3.2",
|
|
17
17
|
"esm-env": "^1.0.0",
|
|
18
|
+
"import-meta-resolve": "^4.0.0",
|
|
18
19
|
"kleur": "^4.1.5",
|
|
19
20
|
"magic-string": "^0.30.5",
|
|
20
21
|
"mrmime": "^2.0.0",
|
package/src/exports/public.d.ts
CHANGED
|
@@ -179,14 +179,6 @@ export interface Config {
|
|
|
179
179
|
extensions?: string[];
|
|
180
180
|
/** SvelteKit options */
|
|
181
181
|
kit?: KitConfig;
|
|
182
|
-
/** [`@sveltejs/package`](/docs/packaging) options. */
|
|
183
|
-
package?: {
|
|
184
|
-
source?: string;
|
|
185
|
-
dir?: string;
|
|
186
|
-
emitTypes?: boolean;
|
|
187
|
-
exports?(filepath: string): boolean;
|
|
188
|
-
files?(filepath: string): boolean;
|
|
189
|
-
};
|
|
190
182
|
/** Preprocessor options, if any. Preprocessing can alternatively also be done through Vite's preprocessor capabilities. */
|
|
191
183
|
preprocess?: any;
|
|
192
184
|
/** `vite-plugin-svelte` plugin options. */
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import * as imr from 'import-meta-resolve';
|
|
5
5
|
import colors from 'kleur';
|
|
6
|
-
import * as vite from 'vite';
|
|
7
6
|
|
|
8
7
|
import { copy, mkdirp, posixify, read, resolve_entry, rimraf } from '../../utils/filesystem.js';
|
|
9
8
|
import { create_static_module, create_dynamic_module } from '../../core/env.js';
|
|
@@ -34,6 +33,7 @@ import {
|
|
|
34
33
|
sveltekit_environment,
|
|
35
34
|
sveltekit_paths
|
|
36
35
|
} from './module_ids.js';
|
|
36
|
+
import { pathToFileURL } from 'node:url';
|
|
37
37
|
|
|
38
38
|
const cwd = process.cwd();
|
|
39
39
|
|
|
@@ -122,6 +122,17 @@ const warning_preprocessor = {
|
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Resolve a dependency relative to the current working directory,
|
|
127
|
+
* rather than relative to this package
|
|
128
|
+
* @param {string} dependency
|
|
129
|
+
*/
|
|
130
|
+
async function resolve_peer_dependency(dependency) {
|
|
131
|
+
// @ts-expect-error the types are wrong
|
|
132
|
+
const resolved = await imr.resolve(dependency, pathToFileURL(process.cwd() + '/dummy.js'));
|
|
133
|
+
return import(resolved);
|
|
134
|
+
}
|
|
135
|
+
|
|
125
136
|
/**
|
|
126
137
|
* Returns the SvelteKit Vite plugins.
|
|
127
138
|
* @returns {Promise<import('vite').Plugin[]>}
|
|
@@ -153,7 +164,9 @@ export async function sveltekit() {
|
|
|
153
164
|
...svelte_config.vitePlugin
|
|
154
165
|
};
|
|
155
166
|
|
|
156
|
-
|
|
167
|
+
const { svelte } = await resolve_peer_dependency('@sveltejs/vite-plugin-svelte');
|
|
168
|
+
|
|
169
|
+
return [...svelte(vite_plugin_svelte_options), ...(await kit({ svelte_config }))];
|
|
157
170
|
}
|
|
158
171
|
|
|
159
172
|
// These variables live outside the `kit()` function because it is re-invoked by each Vite build
|
|
@@ -174,9 +187,11 @@ let manifest_data;
|
|
|
174
187
|
* - https://rollupjs.org/guide/en/#output-generation-hooks
|
|
175
188
|
*
|
|
176
189
|
* @param {{ svelte_config: import('types').ValidatedConfig }} options
|
|
177
|
-
* @return {import('vite').Plugin[]}
|
|
190
|
+
* @return {Promise<import('vite').Plugin[]>}
|
|
178
191
|
*/
|
|
179
|
-
function kit({ svelte_config }) {
|
|
192
|
+
async function kit({ svelte_config }) {
|
|
193
|
+
const vite = await resolve_peer_dependency('vite');
|
|
194
|
+
|
|
180
195
|
const { kit } = svelte_config;
|
|
181
196
|
const out = `${kit.outDir}/output`;
|
|
182
197
|
|
|
@@ -1611,6 +1611,7 @@ export function create_client(app, target) {
|
|
|
1611
1611
|
}
|
|
1612
1612
|
}
|
|
1613
1613
|
|
|
1614
|
+
update_scroll_positions(current_history_index);
|
|
1614
1615
|
const opts = {
|
|
1615
1616
|
[HISTORY_INDEX]: (current_history_index += 1),
|
|
1616
1617
|
[NAVIGATION_INDEX]: current_navigation_index,
|
|
@@ -1810,9 +1811,19 @@ export function create_client(app, target) {
|
|
|
1810
1811
|
// attempt to scroll to that element and avoid any history changes.
|
|
1811
1812
|
// Otherwise, this can cause Firefox to incorrectly assign a null
|
|
1812
1813
|
// history state value without any signal that we can detect.
|
|
1813
|
-
|
|
1814
|
+
const [, current_hash] = current.url.href.split('#');
|
|
1815
|
+
if (current_hash === hash) {
|
|
1814
1816
|
event.preventDefault();
|
|
1815
|
-
|
|
1817
|
+
|
|
1818
|
+
// We're already on /# and click on a link that goes to /#, or we're on
|
|
1819
|
+
// /#top and click on a link that goes to /#top. In those cases just go to
|
|
1820
|
+
// the top of the page, and avoid a history change.
|
|
1821
|
+
if (hash === '' || (hash === 'top' && a.ownerDocument.getElementById('top') === null)) {
|
|
1822
|
+
window.scrollTo({ top: 0 });
|
|
1823
|
+
} else {
|
|
1824
|
+
a.ownerDocument.getElementById(hash)?.scrollIntoView();
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1816
1827
|
return;
|
|
1817
1828
|
}
|
|
1818
1829
|
// set this flag to distinguish between navigations triggered by
|
|
@@ -2161,7 +2172,7 @@ async function load_data(url, invalid) {
|
|
|
2161
2172
|
const { done, value } = await reader.read();
|
|
2162
2173
|
if (done && !text) break;
|
|
2163
2174
|
|
|
2164
|
-
text += !value && text ? '\n' : decoder.decode(value); // no value -> final chunk -> add a new line to trigger the last parse
|
|
2175
|
+
text += !value && text ? '\n' : decoder.decode(value, { stream: true }); // no value -> final chunk -> add a new line to trigger the last parse
|
|
2165
2176
|
|
|
2166
2177
|
while (true) {
|
|
2167
2178
|
const split = text.indexOf('\n');
|
|
@@ -40,9 +40,18 @@ class BaseProvider {
|
|
|
40
40
|
/** @type {import('types').Csp.Source[]} */
|
|
41
41
|
#script_src;
|
|
42
42
|
|
|
43
|
+
/** @type {import('types').Csp.Source[]} */
|
|
44
|
+
#script_src_elem;
|
|
45
|
+
|
|
43
46
|
/** @type {import('types').Csp.Source[]} */
|
|
44
47
|
#style_src;
|
|
45
48
|
|
|
49
|
+
/** @type {import('types').Csp.Source[]} */
|
|
50
|
+
#style_src_attr;
|
|
51
|
+
|
|
52
|
+
/** @type {import('types').Csp.Source[]} */
|
|
53
|
+
#style_src_elem;
|
|
54
|
+
|
|
46
55
|
/** @type {string} */
|
|
47
56
|
#nonce;
|
|
48
57
|
|
|
@@ -57,6 +66,18 @@ class BaseProvider {
|
|
|
57
66
|
|
|
58
67
|
const d = this.#directives;
|
|
59
68
|
|
|
69
|
+
this.#script_src = [];
|
|
70
|
+
this.#script_src_elem = [];
|
|
71
|
+
this.#style_src = [];
|
|
72
|
+
this.#style_src_attr = [];
|
|
73
|
+
this.#style_src_elem = [];
|
|
74
|
+
|
|
75
|
+
const effective_script_src = d['script-src'] || d['default-src'];
|
|
76
|
+
const script_src_elem = d['script-src-elem'];
|
|
77
|
+
const effective_style_src = d['style-src'] || d['default-src'];
|
|
78
|
+
const style_src_attr = d['style-src-attr'];
|
|
79
|
+
const style_src_elem = d['style-src-elem'];
|
|
80
|
+
|
|
60
81
|
if (__SVELTEKIT_DEV__) {
|
|
61
82
|
// remove strict-dynamic in dev...
|
|
62
83
|
// TODO reinstate this if we can figure out how to make strict-dynamic work
|
|
@@ -70,28 +91,34 @@ class BaseProvider {
|
|
|
70
91
|
// if (d['script-src'].length === 0) delete d['script-src'];
|
|
71
92
|
// }
|
|
72
93
|
|
|
73
|
-
const effective_style_src = d['style-src'] || d['default-src'];
|
|
74
|
-
|
|
75
94
|
// ...and add unsafe-inline so we can inject <style> elements
|
|
76
95
|
if (effective_style_src && !effective_style_src.includes('unsafe-inline')) {
|
|
77
96
|
d['style-src'] = [...effective_style_src, 'unsafe-inline'];
|
|
78
97
|
}
|
|
79
|
-
}
|
|
80
98
|
|
|
81
|
-
|
|
82
|
-
|
|
99
|
+
if (style_src_attr && !style_src_attr.includes('unsafe-inline')) {
|
|
100
|
+
d['style-src-attr'] = [...style_src_attr, 'unsafe-inline'];
|
|
101
|
+
}
|
|
83
102
|
|
|
84
|
-
|
|
85
|
-
|
|
103
|
+
if (style_src_elem && !style_src_elem.includes('unsafe-inline')) {
|
|
104
|
+
d['style-src-elem'] = [...style_src_elem, 'unsafe-inline'];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
86
107
|
|
|
87
108
|
this.#script_needs_csp =
|
|
88
|
-
!!effective_script_src &&
|
|
89
|
-
|
|
109
|
+
(!!effective_script_src &&
|
|
110
|
+
effective_script_src.filter((value) => value !== 'unsafe-inline').length > 0) ||
|
|
111
|
+
(!!script_src_elem &&
|
|
112
|
+
script_src_elem.filter((value) => value !== 'unsafe-inline').length > 0);
|
|
90
113
|
|
|
91
114
|
this.#style_needs_csp =
|
|
92
115
|
!__SVELTEKIT_DEV__ &&
|
|
93
|
-
!!effective_style_src &&
|
|
94
|
-
|
|
116
|
+
((!!effective_style_src &&
|
|
117
|
+
effective_style_src.filter((value) => value !== 'unsafe-inline').length > 0) ||
|
|
118
|
+
(!!style_src_attr &&
|
|
119
|
+
style_src_attr.filter((value) => value !== 'unsafe-inline').length > 0) ||
|
|
120
|
+
(!!style_src_elem &&
|
|
121
|
+
style_src_elem.filter((value) => value !== 'unsafe-inline').length > 0));
|
|
95
122
|
|
|
96
123
|
this.script_needs_nonce = this.#script_needs_csp && !this.#use_hashes;
|
|
97
124
|
this.style_needs_nonce = this.#style_needs_csp && !this.#use_hashes;
|
|
@@ -101,10 +128,23 @@ class BaseProvider {
|
|
|
101
128
|
/** @param {string} content */
|
|
102
129
|
add_script(content) {
|
|
103
130
|
if (this.#script_needs_csp) {
|
|
131
|
+
const d = this.#directives;
|
|
132
|
+
|
|
104
133
|
if (this.#use_hashes) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
this.#script_src.push(`
|
|
134
|
+
const hash = sha256(content);
|
|
135
|
+
|
|
136
|
+
this.#script_src.push(`sha256-${hash}`);
|
|
137
|
+
|
|
138
|
+
if (d['script-src-elem']?.length) {
|
|
139
|
+
this.#script_src_elem.push(`sha256-${hash}`);
|
|
140
|
+
}
|
|
141
|
+
} else {
|
|
142
|
+
if (this.#script_src.length === 0) {
|
|
143
|
+
this.#script_src.push(`nonce-${this.#nonce}`);
|
|
144
|
+
}
|
|
145
|
+
if (d['script-src-elem']?.length) {
|
|
146
|
+
this.#script_src_elem.push(`nonce-${this.#nonce}`);
|
|
147
|
+
}
|
|
108
148
|
}
|
|
109
149
|
}
|
|
110
150
|
}
|
|
@@ -112,10 +152,29 @@ class BaseProvider {
|
|
|
112
152
|
/** @param {string} content */
|
|
113
153
|
add_style(content) {
|
|
114
154
|
if (this.#style_needs_csp) {
|
|
155
|
+
const d = this.#directives;
|
|
156
|
+
|
|
115
157
|
if (this.#use_hashes) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
this.#style_src.push(`
|
|
158
|
+
const hash = sha256(content);
|
|
159
|
+
|
|
160
|
+
this.#style_src.push(`sha256-${hash}`);
|
|
161
|
+
|
|
162
|
+
if (d['style-src-attr']?.length) {
|
|
163
|
+
this.#style_src_attr.push(`sha256-${hash}`);
|
|
164
|
+
}
|
|
165
|
+
if (d['style-src-elem']?.length) {
|
|
166
|
+
this.#style_src_elem.push(`sha256-${hash}`);
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
if (this.#style_src.length === 0) {
|
|
170
|
+
this.#style_src.push(`nonce-${this.#nonce}`);
|
|
171
|
+
}
|
|
172
|
+
if (d['style-src-attr']?.length) {
|
|
173
|
+
this.#style_src_attr.push(`nonce-${this.#nonce}`);
|
|
174
|
+
}
|
|
175
|
+
if (d['style-src-elem']?.length) {
|
|
176
|
+
this.#style_src_elem.push(`nonce-${this.#nonce}`);
|
|
177
|
+
}
|
|
119
178
|
}
|
|
120
179
|
}
|
|
121
180
|
}
|
|
@@ -139,6 +198,20 @@ class BaseProvider {
|
|
|
139
198
|
];
|
|
140
199
|
}
|
|
141
200
|
|
|
201
|
+
if (this.#style_src_attr.length > 0) {
|
|
202
|
+
directives['style-src-attr'] = [
|
|
203
|
+
...(directives['style-src-attr'] || []),
|
|
204
|
+
...this.#style_src_attr
|
|
205
|
+
];
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (this.#style_src_elem.length > 0) {
|
|
209
|
+
directives['style-src-elem'] = [
|
|
210
|
+
...(directives['style-src-elem'] || []),
|
|
211
|
+
...this.#style_src_elem
|
|
212
|
+
];
|
|
213
|
+
}
|
|
214
|
+
|
|
142
215
|
if (this.#script_src.length > 0) {
|
|
143
216
|
directives['script-src'] = [
|
|
144
217
|
...(directives['script-src'] || directives['default-src'] || []),
|
|
@@ -146,6 +219,13 @@ class BaseProvider {
|
|
|
146
219
|
];
|
|
147
220
|
}
|
|
148
221
|
|
|
222
|
+
if (this.#script_src_elem.length > 0) {
|
|
223
|
+
directives['script-src-elem'] = [
|
|
224
|
+
...(directives['script-src-elem'] || []),
|
|
225
|
+
...this.#script_src_elem
|
|
226
|
+
];
|
|
227
|
+
}
|
|
228
|
+
|
|
149
229
|
for (const key in directives) {
|
|
150
230
|
if (is_meta && (key === 'frame-ancestors' || key === 'report-uri' || key === 'sandbox')) {
|
|
151
231
|
// these values cannot be used with a <meta> tag
|
package/src/version.js
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -161,14 +161,6 @@ declare module '@sveltejs/kit' {
|
|
|
161
161
|
extensions?: string[];
|
|
162
162
|
/** SvelteKit options */
|
|
163
163
|
kit?: KitConfig;
|
|
164
|
-
/** [`@sveltejs/package`](/docs/packaging) options. */
|
|
165
|
-
package?: {
|
|
166
|
-
source?: string;
|
|
167
|
-
dir?: string;
|
|
168
|
-
emitTypes?: boolean;
|
|
169
|
-
exports?(filepath: string): boolean;
|
|
170
|
-
files?(filepath: string): boolean;
|
|
171
|
-
};
|
|
172
164
|
/** Preprocessor options, if any. Preprocessing can alternatively also be done through Vite's preprocessor capabilities. */
|
|
173
165
|
preprocess?: any;
|
|
174
166
|
/** `vite-plugin-svelte` plugin options. */
|
package/types/index.d.ts.map
CHANGED
|
@@ -143,5 +143,5 @@
|
|
|
143
143
|
null,
|
|
144
144
|
null
|
|
145
145
|
],
|
|
146
|
-
"mappings": ";;;;;;;;;kBA2BiBA,OAAOA;;;;;;;;;;;;aAYZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;;;;;;;;kBAeTC,aAAaA;;;;;;;;;;;;;;;;kBAgBbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4FPC,MAAMA
|
|
146
|
+
"mappings": "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"
|
|
147
147
|
}
|