@sveltejs/adapter-vercel 5.4.6 → 5.4.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.
Files changed (2) hide show
  1. package/index.js +31 -7
  2. package/package.json +2 -2
package/index.js CHANGED
@@ -11,13 +11,27 @@ const name = '@sveltejs/adapter-vercel';
11
11
  const DEFAULT_FUNCTION_NAME = 'fn';
12
12
 
13
13
  const get_default_runtime = () => {
14
- const major = process.version.slice(1).split('.')[0];
15
- if (major === '18') return 'nodejs18.x';
16
- if (major === '20') return 'nodejs20.x';
14
+ const major = Number(process.version.slice(1).split('.')[0]);
15
+
16
+ // If we're building on Vercel, we know that the version will be fine because Vercel
17
+ // provides Node (and Vercel won't provide something it doesn't support).
18
+ // Also means we're not on the hook for updating the adapter every time a new Node
19
+ // version is added to Vercel.
20
+ if (!process.env.VERCEL) {
21
+ if (major < 18 || major > 22) {
22
+ throw new Error(
23
+ `Building locally with unsupported Node.js version: ${process.version}. Please use Node 18, 20 or 22 to build your project, or explicitly specify a runtime in your adapter configuration.`
24
+ );
25
+ }
17
26
 
18
- throw new Error(
19
- `Unsupported Node.js version: ${process.version}. Please use Node 18 or Node 20 to build your project, or explicitly specify a runtime in your adapter configuration.`
20
- );
27
+ if (major % 2 !== 0) {
28
+ throw new Error(
29
+ `Unsupported Node.js version: ${process.version}. Please use an even-numbered Node version to build your project, or explicitly specify a runtime in your adapter configuration.`
30
+ );
31
+ }
32
+ }
33
+
34
+ return `nodejs${major}.x`;
21
35
  };
22
36
 
23
37
  // https://vercel.com/docs/functions/edge-functions/edge-runtime#compatible-node.js-modules
@@ -444,7 +458,17 @@ function static_vercel_config(builder, config, dir) {
444
458
  /** @type {import('./index.js').ImagesConfig | undefined} */
445
459
  const images = config.images;
446
460
 
447
- for (const [src, redirect] of builder.prerendered.redirects) {
461
+ for (let [src, redirect] of builder.prerendered.redirects) {
462
+ if (src.replace(/\/$/, '') === redirect.location.replace(/\/$/, '')) {
463
+ // ignore the extreme edge case of a `/foo` -> `/foo/` redirect,
464
+ // which would only arise if the response was generated by a
465
+ // `handle` hook or outside the app altogether (since you
466
+ // can't declaratively create both routes)
467
+ } else {
468
+ // redirect both `/foo` and `/foo/` to `redirect.location`
469
+ src = src.replace(/\/?$/, '/?');
470
+ }
471
+
448
472
  prerendered_redirects.push({
449
473
  src,
450
474
  headers: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/adapter-vercel",
3
- "version": "5.4.6",
3
+ "version": "5.4.8",
4
4
  "description": "A SvelteKit adapter that creates a Vercel app",
5
5
  "keywords": [
6
6
  "adapter",
@@ -41,7 +41,7 @@
41
41
  "@types/node": "^18.19.48",
42
42
  "typescript": "^5.3.3",
43
43
  "vitest": "^2.0.1",
44
- "@sveltejs/kit": "^2.7.3"
44
+ "@sveltejs/kit": "^2.8.2"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@sveltejs/kit": "^2.4.0"