@sveltejs/kit 2.8.0 → 2.8.2

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "2.8.0",
3
+ "version": "2.8.2",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -106,11 +106,25 @@ function get_raw_body(req, body_size_limit) {
106
106
  // TODO 3.0 make the signature synchronous?
107
107
  // eslint-disable-next-line @typescript-eslint/require-await
108
108
  export async function getRequest({ request, base, bodySizeLimit }) {
109
+ let headers = /** @type {Record<string, string>} */ (request.headers);
110
+ if (request.httpVersionMajor >= 2) {
111
+ // the Request constructor rejects headers with ':' in the name
112
+ headers = Object.assign({}, headers);
113
+ // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.5
114
+ if (headers[':authority']) {
115
+ headers.host = headers[':authority'];
116
+ }
117
+ delete headers[':authority'];
118
+ delete headers[':method'];
119
+ delete headers[':path'];
120
+ delete headers[':scheme'];
121
+ }
122
+
109
123
  return new Request(base + request.url, {
110
124
  // @ts-expect-error
111
125
  duplex: 'half',
112
126
  method: request.method,
113
- headers: /** @type {Record<string, string>} */ (request.headers),
127
+ headers: Object.entries(headers),
114
128
  body:
115
129
  request.method === 'GET' || request.method === 'HEAD'
116
130
  ? undefined
@@ -349,22 +349,6 @@ async function kit({ svelte_config }) {
349
349
  * Stores the final config.
350
350
  */
351
351
  configResolved(config) {
352
- // we search for this plugin by name because we can't detect it
353
- // since it doesn't directly modify the https config unlike the mkcert plugin
354
- const vite_basic_ssl = config.plugins.find(({ name }) => name === 'vite:basic-ssl');
355
-
356
- // by default, when enabling HTTPS in Vite, it also enables HTTP/2
357
- // however, undici has not yet enabled HTTP/2 by default: https://github.com/nodejs/undici/issues/2750
358
- // we set a no-op proxy config to force Vite to downgrade to TLS-only
359
- // see https://vitejs.dev/config/#server-https
360
- if ((config.server.https || vite_basic_ssl) && !config.server.proxy) {
361
- config.server.proxy = {};
362
- }
363
-
364
- if ((config.preview.https || vite_basic_ssl) && !config.preview.proxy) {
365
- config.preview.proxy = {};
366
- }
367
-
368
352
  vite_config = config;
369
353
  }
370
354
  };
@@ -185,7 +185,7 @@ export async function preview(vite, vite_config, svelte_config) {
185
185
 
186
186
  // SSR
187
187
  vite.middlewares.use(async (req, res) => {
188
- const host = req.headers['host'];
188
+ const host = req.headers[':authority'] || req.headers.host;
189
189
 
190
190
  const request = await getRequest({
191
191
  base: `${protocol}://${host}`,
@@ -669,7 +669,9 @@ async function load_node({ loader, parent, url, params, route, server_data_node
669
669
  : await resource.blob(),
670
670
  cache: resource.cache,
671
671
  credentials: resource.credentials,
672
- headers: resource.headers,
672
+ // the headers are undefined on the server if the Headers object is empty
673
+ // so we need to make sure they are also undefined here if there are no headers
674
+ headers: [...resource.headers].length ? resource.headers : undefined,
673
675
  integrity: resource.integrity,
674
676
  keepalive: resource.keepalive,
675
677
  method: resource.method,
@@ -67,8 +67,7 @@ export function get_cookies(request, url, trailing_slash) {
67
67
  return c.value;
68
68
  }
69
69
 
70
- const decoder = opts?.decode || decodeURIComponent;
71
- const req_cookies = parse(header, { decode: decoder });
70
+ const req_cookies = parse(header, { decode: opts?.decode });
72
71
  const cookie = req_cookies[name]; // the decoded string or undefined
73
72
 
74
73
  // in development, if the cookie was set during this session with `cookies.set`,
@@ -95,8 +94,7 @@ export function get_cookies(request, url, trailing_slash) {
95
94
  * @param {import('cookie').CookieParseOptions} opts
96
95
  */
97
96
  getAll(opts) {
98
- const decoder = opts?.decode || decodeURIComponent;
99
- const cookies = parse(header, { decode: decoder });
97
+ const cookies = parse(header, { decode: opts?.decode });
100
98
 
101
99
  for (const c of Object.values(new_cookies)) {
102
100
  if (
@@ -31,9 +31,24 @@ class BaseProvider {
31
31
  /** @type {boolean} */
32
32
  #script_needs_csp;
33
33
 
34
+ /** @type {boolean} */
35
+ #script_src_needs_csp;
36
+
37
+ /** @type {boolean} */
38
+ #script_src_elem_needs_csp;
39
+
34
40
  /** @type {boolean} */
35
41
  #style_needs_csp;
36
42
 
43
+ /** @type {boolean} */
44
+ #style_src_needs_csp;
45
+
46
+ /** @type {boolean} */
47
+ #style_src_attr_needs_csp;
48
+
49
+ /** @type {boolean} */
50
+ #style_src_elem_needs_csp;
51
+
37
52
  /** @type {import('types').CspDirectives} */
38
53
  #directives;
39
54
 
@@ -121,92 +136,81 @@ class BaseProvider {
121
136
  }
122
137
  }
123
138
 
124
- this.#script_needs_csp =
125
- (!!effective_script_src &&
126
- effective_script_src.filter((value) => value !== 'unsafe-inline').length > 0) ||
127
- (!!script_src_elem &&
128
- script_src_elem.filter((value) => value !== 'unsafe-inline').length > 0);
139
+ /** @param {(import('types').Csp.Source | import('types').Csp.ActionSource)[] | undefined} directive */
140
+ const needs_csp = (directive) =>
141
+ !!directive && !directive.some((value) => value === 'unsafe-inline');
129
142
 
143
+ this.#script_src_needs_csp = needs_csp(effective_script_src);
144
+ this.#script_src_elem_needs_csp = needs_csp(script_src_elem);
145
+ this.#style_src_needs_csp = needs_csp(effective_style_src);
146
+ this.#style_src_attr_needs_csp = needs_csp(style_src_attr);
147
+ this.#style_src_elem_needs_csp = needs_csp(style_src_elem);
148
+
149
+ this.#script_needs_csp = this.#script_src_needs_csp || this.#script_src_elem_needs_csp;
130
150
  this.#style_needs_csp =
131
151
  !__SVELTEKIT_DEV__ &&
132
- ((!!effective_style_src &&
133
- effective_style_src.filter((value) => value !== 'unsafe-inline').length > 0) ||
134
- (!!style_src_attr &&
135
- style_src_attr.filter((value) => value !== 'unsafe-inline').length > 0) ||
136
- (!!style_src_elem &&
137
- style_src_elem.filter((value) => value !== 'unsafe-inline').length > 0));
152
+ (this.#style_src_needs_csp ||
153
+ this.#style_src_attr_needs_csp ||
154
+ this.#style_src_elem_needs_csp);
138
155
 
139
156
  this.script_needs_nonce = this.#script_needs_csp && !this.#use_hashes;
140
157
  this.style_needs_nonce = this.#style_needs_csp && !this.#use_hashes;
158
+
141
159
  this.#nonce = nonce;
142
160
  }
143
161
 
144
162
  /** @param {string} content */
145
163
  add_script(content) {
146
- if (this.#script_needs_csp) {
147
- const d = this.#directives;
164
+ if (!this.#script_needs_csp) return;
148
165
 
149
- if (this.#use_hashes) {
150
- const hash = sha256(content);
151
-
152
- this.#script_src.push(`sha256-${hash}`);
153
-
154
- if (d['script-src-elem']?.length) {
155
- this.#script_src_elem.push(`sha256-${hash}`);
156
- }
157
- } else {
158
- if (this.#script_src.length === 0) {
159
- this.#script_src.push(`nonce-${this.#nonce}`);
160
- }
161
- if (d['script-src-elem']?.length) {
162
- this.#script_src_elem.push(`nonce-${this.#nonce}`);
163
- }
164
- }
166
+ /** @type {`nonce-${string}` | `sha256-${string}`} */
167
+ const source = this.#use_hashes ? `sha256-${sha256(content)}` : `nonce-${this.#nonce}`;
168
+
169
+ if (this.#script_src_needs_csp) {
170
+ this.#script_src.push(source);
171
+ }
172
+
173
+ if (this.#script_src_elem_needs_csp) {
174
+ this.#script_src_elem.push(source);
165
175
  }
166
176
  }
167
177
 
168
178
  /** @param {string} content */
169
179
  add_style(content) {
170
- if (this.#style_needs_csp) {
171
- // this is the hash for "/* empty */"
172
- // adding it so that svelte does not break csp
173
- // see https://github.com/sveltejs/svelte/pull/7800
174
- const empty_comment_hash = '9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=';
180
+ if (!this.#style_needs_csp) return;
175
181
 
176
- const d = this.#directives;
182
+ /** @type {`nonce-${string}` | `sha256-${string}`} */
183
+ const source = this.#use_hashes ? `sha256-${sha256(content)}` : `nonce-${this.#nonce}`;
177
184
 
178
- if (this.#use_hashes) {
179
- const hash = sha256(content);
185
+ if (this.#style_src_needs_csp) {
186
+ this.#style_src.push(source);
187
+ }
180
188
 
181
- this.#style_src.push(`sha256-${hash}`);
189
+ if (this.#style_src_needs_csp) {
190
+ this.#style_src.push(source);
191
+ }
182
192
 
183
- if (d['style-src-attr']?.length) {
184
- this.#style_src_attr.push(`sha256-${hash}`);
185
- }
186
- if (d['style-src-elem']?.length) {
187
- if (
188
- hash !== empty_comment_hash &&
189
- !d['style-src-elem'].includes(`sha256-${empty_comment_hash}`)
190
- ) {
191
- this.#style_src_elem.push(`sha256-${empty_comment_hash}`);
192
- }
193
+ if (this.#style_src_attr_needs_csp) {
194
+ this.#style_src_attr.push(source);
195
+ }
193
196
 
194
- this.#style_src_elem.push(`sha256-${hash}`);
195
- }
196
- } else {
197
- if (this.#style_src.length === 0 && !d['style-src']?.includes('unsafe-inline')) {
198
- this.#style_src.push(`nonce-${this.#nonce}`);
199
- }
200
- if (d['style-src-attr']?.length) {
201
- this.#style_src_attr.push(`nonce-${this.#nonce}`);
202
- }
203
- if (d['style-src-elem']?.length) {
204
- if (!d['style-src-elem'].includes(`sha256-${empty_comment_hash}`)) {
205
- this.#style_src_elem.push(`sha256-${empty_comment_hash}`);
206
- }
197
+ if (this.#style_src_elem_needs_csp) {
198
+ // this is the sha256 hash for the string "/* empty */"
199
+ // adding it so that svelte does not break csp
200
+ // see https://github.com/sveltejs/svelte/pull/7800
201
+ const sha256_empty_comment_hash = 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=';
202
+ const d = this.#directives;
203
+
204
+ if (
205
+ d['style-src-elem'] &&
206
+ !d['style-src-elem'].includes(sha256_empty_comment_hash) &&
207
+ !this.#style_src_elem.includes(sha256_empty_comment_hash)
208
+ ) {
209
+ this.#style_src_elem.push(sha256_empty_comment_hash);
210
+ }
207
211
 
208
- this.#style_src_elem.push(`nonce-${this.#nonce}`);
209
- }
212
+ if (source !== sha256_empty_comment_hash) {
213
+ this.#style_src_elem.push(source);
210
214
  }
211
215
  }
212
216
  }
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // generated during release, do not modify
2
2
 
3
3
  /** @type {string} */
4
- export const VERSION = '2.8.0';
4
+ export const VERSION = '2.8.2';
@@ -155,6 +155,6 @@
155
155
  null,
156
156
  null
157
157
  ],
158
- "mappings": ";;;;;;;;;kBA2BiBA,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;aA2BZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;;;;;;;;kBAeTC,aAAaA;;;;;;;;;;;;;;;;kBAgBbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkGPC,MAAMA;;;;;;;;;;;;;;;;;;;;;kBAqBNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DPC,QAAQA;;;;;;;;kBAQRC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuZdC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;;;aAajBC,iBAAiBA;;;;;;;;;;aAUjBC,WAAWA;;;;;;;;;;aAUXC,OAAOA;;;;;;aAMPC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4GTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;aAwBrBC,cAAcA;;kBAETC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCVC,cAAcA;;;;;;;;;;kBAUdC,UAAUA;;;;;;;;;;;;;;;;;;kBAkBVC,aAAaA;;;;;;;;;;;;;;;;;;;kBAmBbC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8CTC,YAAYA;;kBAEPC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4FjBC,cAAcA;;;;;kBAKTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBdC,eAAeA;;;;;;;;;;;;;;;cAenBC,MAAMA;;;;;;kBAMFC,iBAAiBA;;;;;;;kBAOjBC,WAAWA;;;;;;;;;;;;;;;;;;;;;aAqBhBC,UAAUA;;;;;;;kBAOLC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqEpBC,MAAMA;;;;;;;;;;aAUNC,OAAOA;;;;;;;;;;;;;;;;aAgBPC,YAAYA;;;;;;;;;;;;kBC7xCXC,SAASA;;;;;;;;;;kBAqBTC,QAAQA;;;;;;;aDqyCTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BTC,QAAQA;;;;WEj1CRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkDZC,GAAGA;;;;;;;;;;;;;;;;;;;;;WAqBHC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmElBC,UAAUA;;WAELC,MAAMA;;;;;;;;;MASXC,YAAYA;;WAEPC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCXC,yBAAyBA;;;;;;;;;;WAUzBC,yBAAyBA;;;;WAIzBC,sCAAsCA;;;;MAI3CC,8BAA8BA;MAC9BC,8BAA8BA;MAC9BC,2CAA2CA;;;;;;aAM3CC,eAAeA;;WAIVC,cAAcA;;;;;WAKdC,YAAYA;;;;;;MAMjBC,aAAaA;WC3LRC,KAAKA;;;;;;WAcLC,SAASA;;;;;;;;;;;;;;;;;WA6ETC,YAAYA;;;;;;;;;;;;WAYZC,QAAQA;;;;;;;;;;;;;;MAyBbC,iBAAiBA;;;;;;;;WAUZC,UAAUA;;;;;;;;;;;;;WAaVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;WAsGTC,YAAYA;;;;;;;;;;;;;MAajBC,kBAAkBA;;WAEbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCZC,aAAaA;;WA2BRC,eAAeA;;;;;;MAMpBC,uBAAuBA;;MAEvBC,WAAWA;;;;;;;;WAQNC,QAAQA;;;;;;;;;MA2CbC,eAAeA;;;;;MAKfC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC7WdC,WAAWA;;;;;;;;;;;iBAcXC,QAAQA;;;;;iBAiBRC,UAAUA;;;;;;iBASVC,IAAIA;;;;;;iBA8BJC,IAAIA;;;;;;;;;;;;;;;;iBAkDJC,eAAeA;aA7LkCC,QAAQA;aAMVC,YAAYA;cCZ9DC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCoEJC,QAAQA;;;;;;iBCoCFC,UAAUA;;;;;;iBAoBVC,WAAWA;;;;;iBAgFjBC,oBAAoBA;;;;;;;;;;;iBC7LpBC,gBAAgBA;;;;;;;;;iBC+GVC,SAASA;;;;;;;;;cC9HlBC,OAAOA;;;;;cAKPC,GAAGA;;;;;cAKHC,QAAQA;;;;;cAKRC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;iBCWJC,WAAWA;;;;;;;;;;;;;;;;;;;;;iBAyCXC,OAAOA;;;;;;;iBC41DDC,WAAWA;;;;;;;;;;;iBArSjBC,aAAaA;;;;;;;;;;;;iBAiBbC,cAAcA;;;;;;;;;;iBAedC,UAAUA;;;;;iBASVC,qBAAqBA;;;;;;;;iBA2BrBC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;iBAsCJC,UAAUA;;;;iBAmBVC,aAAaA;;;;;;;;;;;;iBAqBPC,WAAWA;;;;;;;;;;;;;;;;;;iBAoCjBC,WAAWA;;;;;iBA2BXC,SAASA;;;;;iBA4CTC,YAAYA;MV/tDhB7D,YAAYA;;;;;;;;;;;YWtJb8D,IAAIA;;;;;;;YAOJC,MAAMA;;;;;;;;;;;;;;;;;iBAiBDC,YAAYA;;;;;;;;;;;;;;;;;;iBCVZC,IAAIA;;;;;;iBCXPC,SAASA;;;;;;;;;;;;;;cAwBTC,IAAIA;;;;;;;;cAeJC,UAAUA;;;;;;cAaVC,OAAOA",
158
+ "mappings": "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",
159
159
  "ignoreList": []
160
160
  }