@sveltejs/kit 1.24.1 → 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.24.1",
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",
@@ -33,7 +33,7 @@
33
33
  "@types/sade": "^1.7.4",
34
34
  "@types/set-cookie-parser": "^2.4.2",
35
35
  "dts-buddy": "^0.2.4",
36
- "marked": "^7.0.0",
36
+ "marked": "^9.0.0",
37
37
  "rollup": "^3.7.0",
38
38
  "svelte": "^4.0.5",
39
39
  "svelte-preprocess": "^5.0.4",
@@ -69,7 +69,7 @@ async function analyse({ manifest_path, env }) {
69
69
  /** @type {Array<'GET' | 'POST'>} */
70
70
  const page_methods = [];
71
71
 
72
- /** @type {import('types').HttpMethod[]} */
72
+ /** @type {(import('types').HttpMethod | '*')[]} */
73
73
  const api_methods = [];
74
74
 
75
75
  /** @type {import('types').PrerenderOption | undefined} */
@@ -96,6 +96,8 @@ async function analyse({ manifest_path, env }) {
96
96
  Object.values(mod).forEach((/** @type {import('types').HttpMethod} */ method) => {
97
97
  if (mod[method] && ENDPOINT_METHODS.has(method)) {
98
98
  api_methods.push(method);
99
+ } else if (mod.fallback) {
100
+ api_methods.push('*');
99
101
  }
100
102
  });
101
103
 
@@ -1084,7 +1084,7 @@ export interface ResolveOptions {
1084
1084
  export interface RouteDefinition<Config = any> {
1085
1085
  id: string;
1086
1086
  api: {
1087
- methods: HttpMethod[];
1087
+ methods: Array<HttpMethod | '*'>;
1088
1088
  };
1089
1089
  page: {
1090
1090
  methods: Array<Extract<HttpMethod, 'GET' | 'POST'>>;
@@ -1092,7 +1092,7 @@ export interface RouteDefinition<Config = any> {
1092
1092
  pattern: RegExp;
1093
1093
  prerender: PrerenderOption;
1094
1094
  segments: RouteSegment[];
1095
- methods: HttpMethod[];
1095
+ methods: Array<HttpMethod | '*'>;
1096
1096
  config: Config;
1097
1097
  }
1098
1098
 
@@ -15,6 +15,7 @@ import * as sync from '../../../core/sync/sync.js';
15
15
  import { get_mime_lookup, runtime_base } from '../../../core/utils.js';
16
16
  import { compact } from '../../../utils/array.js';
17
17
  import { not_found } from '../utils.js';
18
+ import { SCHEME } from '../../../utils/url.js';
18
19
 
19
20
  const cwd = process.cwd();
20
21
 
@@ -31,7 +32,7 @@ export async function dev(vite, vite_config, svelte_config) {
31
32
 
32
33
  const fetch = globalThis.fetch;
33
34
  globalThis.fetch = (info, init) => {
34
- if (typeof info === 'string' && !/^\w+:\/\//.test(info)) {
35
+ if (typeof info === 'string' && !SCHEME.test(info)) {
35
36
  throw new Error(
36
37
  `Cannot use relative URL (${info}) with global fetch — use \`event.fetch\` instead: https://kit.svelte.dev/docs/web-standards#fetch-apis`
37
38
  );
@@ -53,11 +54,14 @@ export async function dev(vite, vite_config, svelte_config) {
53
54
  /** @param {string} url */
54
55
  async function loud_ssr_load_module(url) {
55
56
  try {
56
- return await vite.ssrLoadModule(url);
57
+ return await vite.ssrLoadModule(url, { fixStacktrace: true });
57
58
  } catch (/** @type {any} */ err) {
58
59
  const msg = buildErrorMessage(err, [colors.red(`Internal server error: ${err.message}`)]);
59
60
 
60
- vite.config.logger.error(msg, { error: err });
61
+ if (!vite.config.logger.hasErrorLogged(err)) {
62
+ vite.config.logger.error(msg, { error: err });
63
+ }
64
+
61
65
  vite.ws.send({
62
66
  type: 'error',
63
67
  err: {
@@ -232,7 +236,7 @@ export async function dev(vite, vite_config, svelte_config) {
232
236
  for (const key in manifest_data.matchers) {
233
237
  const file = manifest_data.matchers[key];
234
238
  const url = path.resolve(cwd, file);
235
- const module = await vite.ssrLoadModule(url);
239
+ const module = await vite.ssrLoadModule(url, { fixStacktrace: true });
236
240
 
237
241
  if (module.match) {
238
242
  matchers[key] = module.match;
@@ -247,9 +251,10 @@ export async function dev(vite, vite_config, svelte_config) {
247
251
  };
248
252
  }
249
253
 
250
- /** @param {string} stack */
251
- function fix_stack_trace(stack) {
252
- return stack ? vite.ssrRewriteStacktrace(stack) : stack;
254
+ /** @param {Error} error */
255
+ function fix_stack_trace(error) {
256
+ vite.ssrFixStacktrace(error);
257
+ return error.stack;
253
258
  }
254
259
 
255
260
  await update_manifest();
@@ -392,7 +397,7 @@ export async function dev(vite, vite_config, svelte_config) {
392
397
  } catch (e) {
393
398
  const error = coalesce_to_error(e);
394
399
  res.statusCode = 500;
395
- res.end(fix_stack_trace(/** @type {string} */ (error.stack)));
400
+ res.end(fix_stack_trace(error));
396
401
  }
397
402
  });
398
403
 
@@ -453,7 +458,7 @@ export async function dev(vite, vite_config, svelte_config) {
453
458
 
454
459
  // we have to import `Server` before calling `set_assets`
455
460
  const { Server } = /** @type {import('types').ServerModule} */ (
456
- await vite.ssrLoadModule(`${runtime_base}/server/index.js`)
461
+ await vite.ssrLoadModule(`${runtime_base}/server/index.js`, { fixStacktrace: true })
457
462
  );
458
463
 
459
464
  const { set_fix_stack_trace } = await vite.ssrLoadModule(
@@ -522,7 +527,7 @@ export async function dev(vite, vite_config, svelte_config) {
522
527
  } catch (e) {
523
528
  const error = coalesce_to_error(e);
524
529
  res.statusCode = 500;
525
- res.end(fix_stack_trace(/** @type {string} */ (error.stack)));
530
+ res.end(fix_stack_trace(error));
526
531
  }
527
532
  });
528
533
  };
@@ -12,9 +12,9 @@ import { method_not_allowed } from './utils.js';
12
12
  export async function render_endpoint(event, mod, state) {
13
13
  const method = /** @type {import('types').HttpMethod} */ (event.request.method);
14
14
 
15
- let handler = mod[method];
15
+ let handler = mod[method] || mod.fallback;
16
16
 
17
- if (!handler && method === 'HEAD') {
17
+ if (method === 'HEAD' && mod.GET && !mod.HEAD) {
18
18
  handler = mod.GET;
19
19
  }
20
20
 
@@ -12,6 +12,7 @@ import { public_env } from '../../shared-server.js';
12
12
  import { text } from '../../../exports/index.js';
13
13
  import { create_async_iterator } from '../../../utils/streaming.js';
14
14
  import { SVELTE_KIT_ASSETS } from '../../../constants.js';
15
+ import { SCHEME } from '../../../utils/url.js';
15
16
 
16
17
  // TODO rename this function/module
17
18
 
@@ -151,7 +152,7 @@ export async function render_response({
151
152
  const fetch = globalThis.fetch;
152
153
  let warned = false;
153
154
  globalThis.fetch = (info, init) => {
154
- if (typeof info === 'string' && !/^\w+:\/\//.test(info)) {
155
+ if (typeof info === 'string' && !SCHEME.test(info)) {
155
156
  throw new Error(
156
157
  `Cannot call \`fetch\` eagerly during server side rendering with relative URL (${info}) — put your \`fetch\` calls inside \`onMount\` or a \`load\` function instead`
157
158
  );
@@ -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 {
@@ -259,12 +259,12 @@ export interface ServerErrorNode {
259
259
  export interface ServerMetadataRoute {
260
260
  config: any;
261
261
  api: {
262
- methods: HttpMethod[];
262
+ methods: Array<HttpMethod | '*'>;
263
263
  };
264
264
  page: {
265
265
  methods: Array<'GET' | 'POST'>;
266
266
  };
267
- methods: HttpMethod[];
267
+ methods: Array<HttpMethod | '*'>;
268
268
  prerender: PrerenderOption | undefined;
269
269
  entries: string[] | undefined;
270
270
  }
@@ -367,6 +367,7 @@ export type SSREndpoint = Partial<Record<HttpMethod, RequestHandler>> & {
367
367
  trailingSlash?: TrailingSlash;
368
368
  config?: any;
369
369
  entries?: PrerenderEntryGenerator;
370
+ fallback?: RequestHandler;
370
371
  };
371
372
 
372
373
  export interface SSRRoute {
@@ -79,6 +79,7 @@ const valid_server_exports = new Set([
79
79
  'DELETE',
80
80
  'OPTIONS',
81
81
  'HEAD',
82
+ 'fallback',
82
83
  'prerender',
83
84
  'trailingSlash',
84
85
  'config',
@@ -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/utils/url.js CHANGED
@@ -1,14 +1,19 @@
1
1
  import { BROWSER } from 'esm-env';
2
2
 
3
+ /**
4
+ * Matches a URI scheme. See https://www.rfc-editor.org/rfc/rfc3986#section-3.1
5
+ * @type {RegExp}
6
+ */
7
+ export const SCHEME = /^[a-z][a-z\d+\-.]+:/i;
8
+
3
9
  const absolute = /^([a-z]+:)?\/?\//;
4
- const scheme = /^[a-z]+:/;
5
10
 
6
11
  /**
7
12
  * @param {string} base
8
13
  * @param {string} path
9
14
  */
10
15
  export function resolve(base, path) {
11
- if (scheme.test(path)) return path;
16
+ if (SCHEME.test(path)) return path;
12
17
  if (path[0] === '#') return base + path;
13
18
 
14
19
  const base_match = absolute.exec(base);
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.24.1';
4
+ export const VERSION = '1.25.1';
package/types/index.d.ts CHANGED
@@ -1064,7 +1064,7 @@ declare module '@sveltejs/kit' {
1064
1064
  export interface RouteDefinition<Config = any> {
1065
1065
  id: string;
1066
1066
  api: {
1067
- methods: HttpMethod[];
1067
+ methods: Array<HttpMethod | '*'>;
1068
1068
  };
1069
1069
  page: {
1070
1070
  methods: Array<Extract<HttpMethod, 'GET' | 'POST'>>;
@@ -1072,7 +1072,7 @@ declare module '@sveltejs/kit' {
1072
1072
  pattern: RegExp;
1073
1073
  prerender: PrerenderOption;
1074
1074
  segments: RouteSegment[];
1075
- methods: HttpMethod[];
1075
+ methods: Array<HttpMethod | '*'>;
1076
1076
  config: Config;
1077
1077
  }
1078
1078
 
@@ -1676,6 +1676,7 @@ declare module '@sveltejs/kit' {
1676
1676
  trailingSlash?: TrailingSlash;
1677
1677
  config?: any;
1678
1678
  entries?: PrerenderEntryGenerator;
1679
+ fallback?: RequestHandler;
1679
1680
  };
1680
1681
 
1681
1682
  interface SSRRoute {
@@ -136,5 +136,5 @@
136
136
  null,
137
137
  null
138
138
  ],
139
- "mappings": "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"
139
+ "mappings": ";;;;;;;;;kBA6BiBA,OAAOA;;;;;;;;;;;;;;;;;;;;;;aAsBZC,iBAAiBA;;;;;aAKjBC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBTC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuFPC,MAAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAiDPC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA0YdC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;aAWjBC,iBAAiBA;;;;;;;;aAQjBC,WAAWA;;;;;;;;;;aAUXC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8FTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;aAwBrBC,cAAcA;;kBAETC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCVC,cAAcA;;;;;;;;;;kBAUdC,UAAUA;;;;;;;;;;;;;;;;;;kBAkBVC,aAAaA;;;;;;;;;;;;;;;;;;;kBAmBbC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA0CTC,YAAYA;;kBAEPC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4FjBC,cAAcA;;;;;kBAKTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBdC,eAAeA;;;;;;;;;;;;;;;cAenBC,MAAMA;;;;;;kBAMFC,iBAAiBA;;;;kBAIjBC,WAAWA;;;;;;;;;;;;;;;;;;;aAmBhBC,UAAUA;;;;;;;kBAOLC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuDpBC,MAAMA;;;;;;;;;;aAUNC,OAAOA;;;;;;;;;;;;;;;;aAgBPC,YAAYA;;;;;;;;;;;;kBC/rCXC,SAASA;;;;;;;;;;kBAqBTC,QAAQA;;;;;;;aDusCTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgDTC,QAAQA;;;;WEtwCRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkDZC,GAAGA;;;;;;;;;;;;;;;;;;;;;;WAsBHC,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;;;;;;;;;;;;;;;;;cDvMZC,aAAaA;;;;;;WEETC,KAAKA;;;;;;WAaLC,SAASA;;;;;;;;;;;;;;;WAsETC,YAAYA;;;;;;;WAOZC,QAAQA;;;;;;;;;;;;;MAwBbC,iBAAiBA;;;;;;;;WAUZC,UAAUA;;;;;;;;;;;;;WAaVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;WAsGTC,YAAYA;;;;;;;;;;;;;MAajBC,kBAAkBA;;WAEbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCZC,aAAaA;;WA2BRC,eAAeA;;;;;;MAMpBC,uBAAuBA;;MAEvBC,WAAWA;;;;;;;;WAQNC,QAAQA;;;;;;;;;MAwCbC,eAAeA;;;;;;;;;;;iBClXXC,QAAQA;;;;;;iBAaRC,IAAIA;;;;;;iBA8BJC,IAAIA;;;;;;iBAwBJC,IAAIA;;;;;;;;;;;;;;iBAsBJC,WAAWA;cChIdC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCiEJC,QAAQA;;;;iBCkCFC,UAAUA;;;;;;iBAeVC,WAAWA;;;;;;;;;;;;iBCrFjBC,gBAAgBA;;;;;;;;iBCqFVC,SAASA;;;;;;;;cC/GlBC,OAAOA;;;;cAKPC,GAAGA;;;;;;;;iBCEAC,WAAWA;;;;;;;;;;;;;;;;;;;iBA8BXC,WAAWA;;;;;;;;;;;;;;;;;;;;;iBAuDXC,OAAOA;;;;;;;;;;cC3FVC,qBAAqBA;;;;;;;;;;cAsBrBC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;cAqBJC,UAAUA;;;;cAOVC,aAAaA;;;;;;;;;;;;cAebC,WAAWA;;;;;;;;;;;cAeXC,WAAWA;;;;;;;;;;cAcXC,cAAcA;;;;;;;;;;cAcdC,UAAUA;;;;;;cAUVC,aAAaA;MV+BdrD,YAAYA;;;;;;;;iBWpJXsD,SAASA;;;;;;;;;;;;;;cAwBTC,IAAIA;;;;;;;;cAeJC,UAAUA;;;;;;cAaVC,OAAOA"
140
140
  }