@sveltejs/kit 1.25.0 → 1.25.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "1.25.0",
3
+ "version": "1.25.1",
4
4
  "description": "The fastest way to build Svelte apps",
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,7 +23,7 @@
23
23
  "set-cookie-parser": "^2.6.0",
24
24
  "sirv": "^2.0.2",
25
25
  "tiny-glob": "^0.2.9",
26
- "undici": "~5.23.0"
26
+ "undici": "~5.25.0"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@playwright/test": "1.30.0",
@@ -54,11 +54,14 @@ export async function dev(vite, vite_config, svelte_config) {
54
54
  /** @param {string} url */
55
55
  async function loud_ssr_load_module(url) {
56
56
  try {
57
- return await vite.ssrLoadModule(url);
57
+ return await vite.ssrLoadModule(url, { fixStacktrace: true });
58
58
  } catch (/** @type {any} */ err) {
59
59
  const msg = buildErrorMessage(err, [colors.red(`Internal server error: ${err.message}`)]);
60
60
 
61
- vite.config.logger.error(msg, { error: err });
61
+ if (!vite.config.logger.hasErrorLogged(err)) {
62
+ vite.config.logger.error(msg, { error: err });
63
+ }
64
+
62
65
  vite.ws.send({
63
66
  type: 'error',
64
67
  err: {
@@ -233,7 +236,7 @@ export async function dev(vite, vite_config, svelte_config) {
233
236
  for (const key in manifest_data.matchers) {
234
237
  const file = manifest_data.matchers[key];
235
238
  const url = path.resolve(cwd, file);
236
- const module = await vite.ssrLoadModule(url);
239
+ const module = await vite.ssrLoadModule(url, { fixStacktrace: true });
237
240
 
238
241
  if (module.match) {
239
242
  matchers[key] = module.match;
@@ -248,9 +251,10 @@ export async function dev(vite, vite_config, svelte_config) {
248
251
  };
249
252
  }
250
253
 
251
- /** @param {string} stack */
252
- function fix_stack_trace(stack) {
253
- return stack ? vite.ssrRewriteStacktrace(stack) : stack;
254
+ /** @param {Error} error */
255
+ function fix_stack_trace(error) {
256
+ vite.ssrFixStacktrace(error);
257
+ return error.stack;
254
258
  }
255
259
 
256
260
  await update_manifest();
@@ -393,7 +397,7 @@ export async function dev(vite, vite_config, svelte_config) {
393
397
  } catch (e) {
394
398
  const error = coalesce_to_error(e);
395
399
  res.statusCode = 500;
396
- res.end(fix_stack_trace(/** @type {string} */ (error.stack)));
400
+ res.end(fix_stack_trace(error));
397
401
  }
398
402
  });
399
403
 
@@ -454,7 +458,7 @@ export async function dev(vite, vite_config, svelte_config) {
454
458
 
455
459
  // we have to import `Server` before calling `set_assets`
456
460
  const { Server } = /** @type {import('types').ServerModule} */ (
457
- await vite.ssrLoadModule(`${runtime_base}/server/index.js`)
461
+ await vite.ssrLoadModule(`${runtime_base}/server/index.js`, { fixStacktrace: true })
458
462
  );
459
463
 
460
464
  const { set_fix_stack_trace } = await vite.ssrLoadModule(
@@ -523,7 +527,7 @@ export async function dev(vite, vite_config, svelte_config) {
523
527
  } catch (e) {
524
528
  const error = coalesce_to_error(e);
525
529
  res.statusCode = 500;
526
- res.end(fix_stack_trace(/** @type {string} */ (error.stack)));
530
+ res.end(fix_stack_trace(error));
527
531
  }
528
532
  });
529
533
  };
@@ -28,6 +28,11 @@ export async function respond_with_error({
28
28
  error,
29
29
  resolve_opts
30
30
  }) {
31
+ // reroute to the fallback page to prevent an infinite chain of requests.
32
+ if (event.request.headers.get('x-sveltekit-error')) {
33
+ return static_error_page(options, status, /** @type {Error} */ (error).message);
34
+ }
35
+
31
36
  /** @type {import('./types').Fetched[]} */
32
37
  const fetched = [];
33
38
 
@@ -457,6 +457,14 @@ export async function respond(request, options, manifest, state) {
457
457
  return response;
458
458
  }
459
459
 
460
+ if (state.error && event.isSubRequest) {
461
+ return await fetch(request, {
462
+ headers: {
463
+ 'x-sveltekit-error': 'true'
464
+ }
465
+ });
466
+ }
467
+
460
468
  if (state.error) {
461
469
  return text('Internal Server Error', {
462
470
  status: 500
@@ -99,15 +99,7 @@ export async function handle_error_and_jsonify(event, options, error) {
99
99
  return error.body;
100
100
  } else {
101
101
  if (__SVELTEKIT_DEV__ && typeof error == 'object') {
102
- error = new Proxy(error, {
103
- get: (target, property) => {
104
- if (property === 'stack') {
105
- return fix_stack_trace(target.stack);
106
- }
107
-
108
- return Reflect.get(target, property, target);
109
- }
110
- });
102
+ fix_stack_trace(error);
111
103
  }
112
104
 
113
105
  return (
@@ -4,8 +4,8 @@ export let private_env = {};
4
4
  /** @type {Record<string, string>} */
5
5
  export let public_env = {};
6
6
 
7
- /** @param {string} stack */
8
- export let fix_stack_trace = (stack) => stack;
7
+ /** @param {any} error */
8
+ export let fix_stack_trace = (error) => error?.stack;
9
9
 
10
10
  /** @type {(environment: Record<string, string>) => void} */
11
11
  export function set_private_env(environment) {
@@ -17,7 +17,7 @@ export function set_public_env(environment) {
17
17
  public_env = environment;
18
18
  }
19
19
 
20
- /** @param {(stack: string) => string} value */
20
+ /** @param {(error: Error) => string} value */
21
21
  export function set_fix_stack_trace(value) {
22
22
  fix_stack_trace = value;
23
23
  }
@@ -32,7 +32,7 @@ export interface ServerInternalModule {
32
32
  set_private_env(environment: Record<string, string>): void;
33
33
  set_public_env(environment: Record<string, string>): void;
34
34
  set_version(version: string): void;
35
- set_fix_stack_trace(fix_stack_trace: (stack: string) => string): void;
35
+ set_fix_stack_trace(fix_stack_trace: (error: unknown) => string): void;
36
36
  }
37
37
 
38
38
  export interface Asset {
@@ -136,6 +136,7 @@ export function exec(match, params, matchers) {
136
136
  const result = {};
137
137
 
138
138
  const values = match.slice(1);
139
+ const values_needing_match = values.filter((value) => value !== undefined);
139
140
 
140
141
  let buffered = 0;
141
142
 
@@ -170,6 +171,15 @@ export function exec(match, params, matchers) {
170
171
  if (next_param && !next_param.rest && next_param.optional && next_value && param.chained) {
171
172
  buffered = 0;
172
173
  }
174
+
175
+ // There are no more params and no more values, but all non-empty values have been matched
176
+ if (
177
+ !next_param &&
178
+ !next_value &&
179
+ Object.keys(result).length === values_needing_match.length
180
+ ) {
181
+ buffered = 0;
182
+ }
173
183
  continue;
174
184
  }
175
185
 
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 = '1.25.0';
4
+ export const VERSION = '1.25.1';