Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: handle multiple Set-Cookie in headers #40579

Closed
wants to merge 9 commits into from
Closed

Conversation

balazsorban44
Copy link
Member

@balazsorban44 balazsorban44 commented Sep 15, 2022

res.setHeader:

Sets a value for the header overwriting existing values

This means that any previously set Set-Cookie header was overridden. Using appendHeader for Set-Cookie we can ensure that we concatenate with the already set value instead of overriding.

Fixes #40518

Bug

  • Related issues linked using fixes #number
  • Integration tests added
  • Errors have helpful link attached, see contributing.md

Feature

  • Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
  • Related issues linked using fixes #number
  • Integration tests added
  • Documentation added
  • Telemetry added. In case of a feature if it's used or not.
  • Errors have helpful link attached, see contributing.md

Documentation / Examples

  • Make sure the linting passes by running pnpm lint
  • The examples guidelines are followed from our contributing doc

fix NEXT-582 (link)

@balazsorban44 balazsorban44 marked this pull request as ready for review September 15, 2022 14:33
@ijjk
Copy link
Member

ijjk commented Sep 15, 2022

Failing test suites

Commit: 3779313

pnpm testheadless test/e2e/yarn-pnp/test/with-typescript.test.ts

  • yarn PnP > should compile and serve the index page correctly with-typescript
Expand output

● yarn PnP › should compile and serve the index page correctly with-typescript

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  21 |     let next: NextInstance
  22 |
> 23 |     beforeAll(async () => {
     |     ^
  24 |       const srcDir = join(__dirname, '../../../../examples', example)
  25 |       const srcFiles = await fs.readdir(srcDir)
  26 |

  at runTests (e2e/yarn-pnp/test/utils.ts:23:5)
  at e2e/yarn-pnp/test/with-typescript.test.ts:4:11
  at Object.<anonymous> (e2e/yarn-pnp/test/with-typescript.test.ts:3:1)

● Test suite failed to run

next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished

   99 |     if (nextInstance) {
  100 |       await nextInstance.destroy()
> 101 |       throw new Error(
      |             ^
  102 |         `next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished`
  103 |       )
  104 |     }

  at lib/e2e-utils.ts:101:13

Read more about building and testing Next.js in contributing.md.

@ijjk
Copy link
Member

ijjk commented Sep 15, 2022

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js fix/issue-40518 Change
buildDuration 26.5s 25.9s -556ms
buildDurationCached 8.5s 8.9s ⚠️ +378ms
nodeModulesSize 95 MB 95 MB ⚠️ +1.1 kB
nextStartRea..uration (ms) 303ms 283ms -20ms
Page Load Tests Overall decrease ⚠️
vercel/next.js canary vercel/next.js fix/issue-40518 Change
/ failed reqs 0 0
/ total time (seconds) 10.425 10.392 -0.03
/ avg req/sec 239.8 240.58 +0.78
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 6.306 6.484 ⚠️ +0.18
/error-in-render avg req/sec 396.43 385.57 ⚠️ -10.86
Client Bundles (main, webpack) Overall decrease ✓
vercel/next.js canary vercel/next.js fix/issue-40518 Change
485.HASH.js gzip 181 B 181 B
framework-HASH.js gzip 45.4 kB 45.4 kB
main-HASH.js gzip 27 kB 27 kB -19 B
webpack-HASH.js gzip 1.52 kB 1.52 kB ⚠️ +1 B
Overall change 74.1 kB 74.1 kB -18 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js fix/issue-40518 Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js fix/issue-40518 Change
_app-HASH.js gzip 194 B 195 B ⚠️ +1 B
_error-HASH.js gzip 182 B 180 B -2 B
amp-HASH.js gzip 485 B 486 B ⚠️ +1 B
css-HASH.js gzip 325 B 328 B ⚠️ +3 B
dynamic-HASH.js gzip 1.84 kB 1.84 kB
edge-ssr-HASH.js gzip 262 B 262 B
head-HASH.js gzip 355 B 355 B
hooks-HASH.js gzip 369 B 368 B -1 B
image-HASH.js gzip 3.81 kB 3.81 kB
index-HASH.js gzip 257 B 256 B -1 B
link-HASH.js gzip 2.24 kB 2.24 kB
routerDirect..HASH.js gzip 311 B 312 B ⚠️ +1 B
script-HASH.js gzip 390 B 388 B -2 B
withRouter-HASH.js gzip 308 B 308 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 11.4 kB 11.4 kB
Client Build Manifests Overall increase ⚠️
vercel/next.js canary vercel/next.js fix/issue-40518 Change
_buildManifest.js gzip 483 B 484 B ⚠️ +1 B
Overall change 483 B 484 B ⚠️ +1 B
Rendered Page Sizes Overall increase ⚠️
vercel/next.js canary vercel/next.js fix/issue-40518 Change
index.html gzip 511 B 513 B ⚠️ +2 B
link.html gzip 525 B 526 B ⚠️ +1 B
withRouter.html gzip 507 B 507 B
Overall change 1.54 kB 1.55 kB ⚠️ +3 B
Edge SSR Page bundle Size Overall decrease ✓
vercel/next.js canary vercel/next.js fix/issue-40518 Change
edge-ssr.js gzip 56.4 kB 56.4 kB -4 B
Overall change 56.4 kB 56.4 kB -4 B
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js fix/issue-40518 Change
middleware-b..fest.js gzip 576 B 577 B ⚠️ +1 B
middleware-r..fest.js gzip 144 B 144 B
middleware.js gzip 27.1 kB 27.1 kB ⚠️ +6 B
edge-runtime..pack.js gzip 1.83 kB 1.83 kB
Overall change 29.7 kB 29.7 kB ⚠️ +7 B

Diffs

Diff for middleware-b..-manifest.js
@@ -9,89 +9,89 @@ self.__BUILD_MANIFEST = {
   rootMainFiles: [],
   pages: {
     "/": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/index-2e341fa2c3d39f22.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/index-d6b08c488895803d.js"
     ],
     "/_app": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/_app-3d48c894c05b9917.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/_app-442325f2f91dcb8b.js"
     ],
     "/_error": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/_error-853777012f2e4d74.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/_error-4bd9c4ccb29fca78.js"
     ],
     "/amp": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/amp-37c8bdc7773e7e12.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/amp-17ee43dd14045de4.js"
     ],
     "/css": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
+      "static/chunks/main-06fa639dd345a92f.js",
       "static/css/94fdbc56eafa2039.css",
-      "static/chunks/pages/css-a25c55026497f507.js"
+      "static/chunks/pages/css-6652287f206edb9d.js"
     ],
     "/dynamic": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/dynamic-113b340bf341975b.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/dynamic-0ceb4f4614dd71ce.js"
     ],
     "/edge-ssr": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/edge-ssr-6c18e2bfa9dd1b3d.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/edge-ssr-d2faaf793ec881a0.js"
     ],
     "/head": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/head-26fc7efd68ee1988.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/head-c981f7829e068e35.js"
     ],
     "/hooks": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/hooks-9e5b74ca6a209ef9.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/hooks-6a077bfba7c032e6.js"
     ],
     "/image": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/image-0dd5bcb095171532.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/image-0e82e34465903e6a.js"
     ],
     "/link": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/link-41da4c54b5894295.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/link-2a333a31f5eea6dd.js"
     ],
     "/routerDirect": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/routerDirect-a9644e0497614e68.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/routerDirect-9f78593b1094f644.js"
     ],
     "/script": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/script-d418651b74c28800.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/script-bbb1b6ce3591f2bc.js"
     ],
     "/withRouter": [
-      "static/chunks/webpack-8bedba59b7f28726.js",
+      "static/chunks/webpack-ebc3796110f6939b.js",
       "static/chunks/framework-0249bf7bc1c3f377.js",
-      "static/chunks/main-fc0cbeb6b3ca8174.js",
-      "static/chunks/pages/withRouter-0bdc53cca41bd0de.js"
+      "static/chunks/main-06fa639dd345a92f.js",
+      "static/chunks/pages/withRouter-fe8c9c0a49e02825.js"
     ]
   },
   ampFirstPages: []
Diff for middleware-r..-manifest.js
@@ -1,6 +1,6 @@
 self.__REACT_LOADABLE_MANIFEST = {
   "dynamic.js -> ../components/hello": {
-    id: 1485,
-    files: ["static/chunks/485.389b8fa8518b296b.js"]
+    id: 5188,
+    files: ["static/chunks/188.d71e83b3d5297829.js"]
   }
 };
Diff for middleware.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [826],
   {
-    /***/ 939: /***/ (
+    /***/ 979: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -14,7 +14,7 @@
       __webpack_require__.d(__webpack_exports__, {
         default: () =>
           /* binding */ next_middleware_loaderabsolutePagePath_private_next_root_dir_2Fmiddleware_js_page_2Fmiddleware_rootDir_2Ftmp_2Fnext_stats_2Fstats_app_matchers_
-      }); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/error.js
+      }); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/error.js
 
       class PageSignatureError extends Error {
         constructor({ page }) {
@@ -41,7 +41,7 @@
   Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent
   `);
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/utils.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/utils.js
 
       //# sourceMappingURL=error.js.map
       function fromNodeHeaders(object) {
@@ -157,7 +157,7 @@
             }
           );
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
 
       //# sourceMappingURL=utils.js.map
       const responseSymbol = Symbol("response");
@@ -203,7 +203,7 @@
             page: this.sourcePage
           });
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
 
       //# sourceMappingURL=fetch-event.js.map
       function detectDomainLocale(domainItems, hostname, detectedLocale) {
@@ -232,7 +232,7 @@
           }
         }
         return domainItem;
-      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
+      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
 
       /**
        * Removes the trailing slash for a given route or page path. Preserves the
@@ -242,7 +242,7 @@
        *   - `/` -> `/`
        */ function removeTrailingSlash(route) {
         return route.replace(/\/$/, "") || "/";
-      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
+      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
 
       /**
        * Given a path this function will find the pathname, query and hash and return
@@ -270,7 +270,7 @@
           query: "",
           hash: ""
         };
-      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
+      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
 
       /**
        * Adds the provided prefix to the given path. It first ensures that the path
@@ -281,7 +281,7 @@
         }
         const { pathname, query, hash } = parsePath(path);
         return `${prefix}${pathname}${query}${hash}`;
-      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
+      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
 
       /**
        * Similarly to `addPathPrefix`, this function adds a suffix at the end on the
@@ -293,7 +293,7 @@
         }
         const { pathname, query, hash } = parsePath(path);
         return `${pathname}${suffix}${query}${hash}`;
-      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
+      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
 
       /**
        * Checks if a given path starts with a given prefix. It ensures it matches
@@ -307,7 +307,7 @@
         }
         const { pathname } = parsePath(path);
         return pathname === prefix || pathname.startsWith(prefix + "/");
-      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
+      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
 
       /**
        * For a given path and a locale, if the locale is given, it will prefix the
@@ -324,7 +324,7 @@
           return addPathPrefix(path, `/${locale}`);
         }
         return path;
-      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
+      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
 
       function formatNextPathnameInfo(info) {
         let pathname = addLocale(
@@ -348,7 +348,7 @@
             ? addPathSuffix(pathname, "/")
             : pathname
           : removeTrailingSlash(pathname);
-      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/get-hostname.js
+      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/get-hostname.js
 
       /**
        * Takes an object with a hostname property (like a parsed URL) and some
@@ -363,7 +363,7 @@
           parsed.hostname) == null
           ? void 0
           : ref.split(":")[0].toLowerCase();
-      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
+      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
 
       /**
        * For a pathname that may include a locale from a list of locales, it
@@ -393,7 +393,7 @@
           pathname,
           detectedLocale
         };
-      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
+      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
 
       /**
        * Given a path and a prefix it will remove the prefix when it exists in the
@@ -409,7 +409,7 @@
             : `/${withoutPrefix}`;
         }
         return path;
-      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
+      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
 
       function getNextPathnameInfo(pathname, options) {
         var _nextConfig;
@@ -446,7 +446,7 @@
             info.pathname;
         }
         return info;
-      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/next-url.js
+      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/next-url.js
 
       const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|::1|localhost)/;
       function parseURL(url, base) {
@@ -655,7 +655,7 @@
         clone() {
           return new NextURL(String(this), this[Internal].options);
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/serialize.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/serialize.js
 
       //# sourceMappingURL=next-url.js.map
       const SAME_SITE = ["strict", "lax", "none"];
@@ -737,7 +737,7 @@
           })
         };
         return compact(cookie);
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/request-cookies.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/request-cookies.js
 
       //# sourceMappingURL=serialize.js.map
       /**
@@ -830,7 +830,7 @@
             Object.fromEntries(this._parsed)
           )}`;
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/response-cookies.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/response-cookies.js
 
       //# sourceMappingURL=request-cookies.js.map
       function replace(bag, headers) {
@@ -925,7 +925,7 @@
             Object.fromEntries(this._parsed)
           )}`;
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/index.js // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/request.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/index.js // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/request.js
 
       //# sourceMappingURL=response-cookies.js.map
       //# sourceMappingURL=index.js.map
@@ -1000,7 +1000,7 @@
         get url() {
           return this[INTERNALS].url.toString();
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/response.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/response.js
 
       //# sourceMappingURL=request.js.map
       const response_INTERNALS = Symbol("internal response");
@@ -1100,7 +1100,7 @@
             headers
           });
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
 
       //# sourceMappingURL=response.js.map
       /**
@@ -1114,7 +1114,7 @@
         return `${relative.protocol}//${relative.host}` === origin
           ? relative.toString().replace(origin, "")
           : relative.toString();
-      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/internal-utils.js
+      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/internal-utils.js
 
       const INTERNAL_QUERY_NAMES = [
         "__nextFallback",
@@ -1138,7 +1138,7 @@
           }
         }
         return searchParams;
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
 
       //# sourceMappingURL=internal-utils.js.map
       // remove (name) from pathname as it's not considered for routing
@@ -1162,7 +1162,7 @@
       }
       function normalizeRscPath(pathname, enabled) {
         return enabled ? pathname.replace(/\.rsc($|\?)/, "") : pathname;
-      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/client/components/app-router-headers.js
+      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/client/components/app-router-headers.js
 
       const RSC = "RSC";
       const NEXT_ROUTER_STATE_TREE = "Next-Router-State-Tree";
@@ -1173,7 +1173,7 @@
         [RSC],
         [NEXT_ROUTER_STATE_TREE],
         [NEXT_ROUTER_PREFETCH]
-      ]; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/adapter.js
+      ]; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/adapter.js
 
       class NextRequestHint extends NextRequest {
         constructor(params) {
@@ -1396,12 +1396,12 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           enumerable: false,
           configurable: false
         });
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-stats%2Fstats-app&matchers=!
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-stats%2Fstats-app&matchers=!
 
       //# sourceMappingURL=adapter.js.map
       enhanceGlobals();
 
-      var mod = __webpack_require__(839);
+      var mod = __webpack_require__(722);
       var handler = mod.middleware || mod.default;
 
       if (typeof handler !== "function") {
@@ -1425,7 +1425,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 839: /***/ (
+    /***/ 722: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -1437,7 +1437,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         /* harmony export */
       });
       /* harmony import */ var next_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        352
+        541
       );
       /* harmony import */ var next_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(
         next_server__WEBPACK_IMPORTED_MODULE_0__
@@ -1450,7 +1450,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 774: /***/ (__unused_webpack_module, exports) => {
+    /***/ 658: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1470,7 +1470,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 843: /***/ (__unused_webpack_module, exports) => {
+    /***/ 996: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1508,7 +1508,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 940: /***/ (__unused_webpack_module, exports) => {
+    /***/ 36: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1540,7 +1540,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 296: /***/ (
+    /***/ 220: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1551,8 +1551,8 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.addLocale = addLocale;
-      var _addPathPrefix = __webpack_require__(338);
-      var _pathHasPrefix = __webpack_require__(965);
+      var _addPathPrefix = __webpack_require__(770);
+      var _pathHasPrefix = __webpack_require__(757);
       function addLocale(path, locale, defaultLocale, ignorePrefix) {
         if (
           locale &&
@@ -1572,7 +1572,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 338: /***/ (
+    /***/ 770: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1583,7 +1583,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.addPathPrefix = addPathPrefix;
-      var _parsePath = __webpack_require__(426);
+      var _parsePath = __webpack_require__(510);
       function addPathPrefix(path, prefix) {
         if (!path.startsWith("/") || !prefix) {
           return path;
@@ -1595,14 +1595,18 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 35: /***/ (__unused_webpack_module, exports, __webpack_require__) => {
+    /***/ 695: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
       exports.addPathSuffix = addPathSuffix;
-      var _parsePath = __webpack_require__(426);
+      var _parsePath = __webpack_require__(510);
       function addPathSuffix(path, suffix) {
         if (!path.startsWith("/") || !suffix) {
           return path;
@@ -1614,7 +1618,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 277: /***/ (
+    /***/ 287: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1625,10 +1629,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.formatNextPathnameInfo = formatNextPathnameInfo;
-      var _removeTrailingSlash = __webpack_require__(732);
-      var _addPathPrefix = __webpack_require__(338);
-      var _addPathSuffix = __webpack_require__(35);
-      var _addLocale = __webpack_require__(296);
+      var _removeTrailingSlash = __webpack_require__(849);
+      var _addPathPrefix = __webpack_require__(770);
+      var _addPathSuffix = __webpack_require__(695);
+      var _addLocale = __webpack_require__(220);
       function formatNextPathnameInfo(info) {
         let pathname = (0, _addLocale).addLocale(
           info.pathname,
@@ -1659,7 +1663,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 369: /***/ (
+    /***/ 396: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1670,9 +1674,9 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.getNextPathnameInfo = getNextPathnameInfo;
-      var _normalizeLocalePath = __webpack_require__(940);
-      var _removePathPrefix = __webpack_require__(68);
-      var _pathHasPrefix = __webpack_require__(965);
+      var _normalizeLocalePath = __webpack_require__(36);
+      var _removePathPrefix = __webpack_require__(349);
+      var _pathHasPrefix = __webpack_require__(757);
       function getNextPathnameInfo(pathname, options) {
         var _nextConfig;
         const { basePath, i18n, trailingSlash } =
@@ -1722,7 +1726,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 426: /***/ (__unused_webpack_module, exports) => {
+    /***/ 510: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1756,7 +1760,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 965: /***/ (
+    /***/ 757: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1767,7 +1771,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.pathHasPrefix = pathHasPrefix;
-      var _parsePath = __webpack_require__(426);
+      var _parsePath = __webpack_require__(510);
       function pathHasPrefix(path, prefix) {
         if (typeof path !== "string") {
           return false;
@@ -1779,14 +1783,18 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 68: /***/ (__unused_webpack_module, exports, __webpack_require__) => {
+    /***/ 349: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
       exports.removePathPrefix = removePathPrefix;
-      var _pathHasPrefix = __webpack_require__(965);
+      var _pathHasPrefix = __webpack_require__(757);
       function removePathPrefix(path, prefix) {
         if ((0, _pathHasPrefix).pathHasPrefix(path, prefix)) {
           const withoutPrefix = path.slice(prefix.length);
@@ -1800,7 +1808,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 732: /***/ (__unused_webpack_module, exports) => {
+    /***/ 849: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1814,7 +1822,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 166: /***/ (module, exports, __webpack_require__) => {
+    /***/ 204: /***/ (module, exports, __webpack_require__) => {
       var __dirname = "/";
       var __WEBPACK_AMD_DEFINE_RESULT__;
       (() => {
@@ -2656,7 +2664,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 524: /***/ (__unused_webpack_module, exports) => {
+    /***/ 666: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -2697,16 +2705,20 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 62: /***/ (__unused_webpack_module, exports, __webpack_require__) => {
+    /***/ 901: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
-      var _detectDomainLocale = __webpack_require__(843);
-      var _formatNextPathnameInfo = __webpack_require__(277);
-      var _getHostname = __webpack_require__(774);
-      var _getNextPathnameInfo = __webpack_require__(369);
+      var _detectDomainLocale = __webpack_require__(996);
+      var _formatNextPathnameInfo = __webpack_require__(287);
+      var _getHostname = __webpack_require__(658);
+      var _getNextPathnameInfo = __webpack_require__(396);
       const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|::1|localhost)/;
       function parseURL(url, base) {
         return new URL(
@@ -2926,7 +2938,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 915: /***/ (
+    /***/ 580: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2948,21 +2960,25 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return _responseCookies.ResponseCookies;
         }
       });
-      var _requestCookies = __webpack_require__(79);
-      var _responseCookies = __webpack_require__(442);
+      var _requestCookies = __webpack_require__(205);
+      var _responseCookies = __webpack_require__(618);
 
       //# sourceMappingURL=index.js.map
 
       /***/
     },
 
-    /***/ 79: /***/ (__unused_webpack_module, exports, __webpack_require__) => {
+    /***/ 205: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
-      var _serialize = __webpack_require__(213);
+      var _serialize = __webpack_require__(477);
       class RequestCookies {
         _parsed = new Map();
         constructor(requestHeaders) {
@@ -3059,7 +3075,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 442: /***/ (
+    /***/ 618: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3069,7 +3085,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
-      var _serialize = __webpack_require__(213);
+      var _serialize = __webpack_require__(477);
       function replace(bag, headers) {
         headers.delete("set-cookie");
         for (const [, value] of bag) {
@@ -3166,7 +3182,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 213: /***/ (__unused_webpack_module, exports) => {
+    /***/ 477: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -3257,7 +3273,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 829: /***/ (
+    /***/ 985: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3269,10 +3285,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       };
       __webpack_unused_export__ = void 0;
-      var _nextUrl = __webpack_require__(62);
-      var _utils = __webpack_require__(88);
-      var _error = __webpack_require__(524);
-      var _cookies = __webpack_require__(915);
+      var _nextUrl = __webpack_require__(901);
+      var _utils = __webpack_require__(30);
+      var _error = __webpack_require__(666);
+      var _cookies = __webpack_require__(580);
       const INTERNALS = Symbol("internal request");
       __webpack_unused_export__ = INTERNALS;
       class NextRequest extends Request {
@@ -3353,7 +3369,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 177: /***/ (
+    /***/ 165: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3364,9 +3380,9 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       __webpack_unused_export__ = {
         value: true
       };
-      var _nextUrl = __webpack_require__(62);
-      var _utils = __webpack_require__(88);
-      var _cookies = __webpack_require__(915);
+      var _nextUrl = __webpack_require__(901);
+      var _utils = __webpack_require__(30);
+      var _cookies = __webpack_require__(580);
       const INTERNALS = Symbol("internal response");
       const REDIRECTS = new Set([301, 302, 303, 307, 308]);
       function handleMiddlewareField(init, headers) {
@@ -3475,7 +3491,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 873: /***/ (
+    /***/ 132: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3489,7 +3505,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       __webpack_unused_export__ = isBot;
       exports.Nf = userAgentFromString;
       exports.WE = userAgent;
-      var _uaParserJs = _interopRequireDefault(__webpack_require__(166));
+      var _uaParserJs = _interopRequireDefault(__webpack_require__(204));
       function _interopRequireDefault(obj) {
         return obj && obj.__esModule
           ? obj
@@ -3517,7 +3533,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 88: /***/ (__unused_webpack_module, exports) => {
+    /***/ 30: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -3634,13 +3650,13 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 352: /***/ (module, exports, __webpack_require__) => {
+    /***/ 541: /***/ (module, exports, __webpack_require__) => {
       const serverExports = {
-        NextRequest: __webpack_require__(829) /* .NextRequest */.Im,
-        NextResponse: __webpack_require__(177) /* .NextResponse */.x,
-        userAgentFromString: __webpack_require__(873) /* .userAgentFromString */
+        NextRequest: __webpack_require__(985) /* .NextRequest */.Im,
+        NextResponse: __webpack_require__(165) /* .NextResponse */.x,
+        userAgentFromString: __webpack_require__(132) /* .userAgentFromString */
           .Nf,
-        userAgent: __webpack_require__(873) /* .userAgent */.WE
+        userAgent: __webpack_require__(132) /* .userAgent */.WE
       };
 
       if (typeof URLPattern !== "undefined") {
@@ -3666,7 +3682,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = moduleId =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ var __webpack_exports__ = __webpack_exec__(939);
+    /******/ var __webpack_exports__ = __webpack_exec__(979);
     /******/ (_ENTRIES =
       typeof _ENTRIES === "undefined"
         ? {}
Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -1,28 +1,28 @@
 self.__BUILD_MANIFEST = {
   __rewrites: { beforeFiles: [], afterFiles: [], fallback: [] },
-  "/": ["static\u002Fchunks\u002Fpages\u002Findex-2e341fa2c3d39f22.js"],
-  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-853777012f2e4d74.js"],
-  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-37c8bdc7773e7e12.js"],
+  "/": ["static\u002Fchunks\u002Fpages\u002Findex-d6b08c488895803d.js"],
+  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-4bd9c4ccb29fca78.js"],
+  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-17ee43dd14045de4.js"],
   "/css": [
     "static\u002Fcss\u002F94fdbc56eafa2039.css",
-    "static\u002Fchunks\u002Fpages\u002Fcss-a25c55026497f507.js"
+    "static\u002Fchunks\u002Fpages\u002Fcss-6652287f206edb9d.js"
   ],
   "/dynamic": [
-    "static\u002Fchunks\u002Fpages\u002Fdynamic-113b340bf341975b.js"
+    "static\u002Fchunks\u002Fpages\u002Fdynamic-0ceb4f4614dd71ce.js"
   ],
   "/edge-ssr": [
-    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-6c18e2bfa9dd1b3d.js"
+    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-d2faaf793ec881a0.js"
   ],
-  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-26fc7efd68ee1988.js"],
-  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-9e5b74ca6a209ef9.js"],
-  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-0dd5bcb095171532.js"],
-  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-41da4c54b5894295.js"],
+  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-c981f7829e068e35.js"],
+  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-6a077bfba7c032e6.js"],
+  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-0e82e34465903e6a.js"],
+  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-2a333a31f5eea6dd.js"],
   "/routerDirect": [
-    "static\u002Fchunks\u002Fpages\u002FrouterDirect-a9644e0497614e68.js"
+    "static\u002Fchunks\u002Fpages\u002FrouterDirect-9f78593b1094f644.js"
   ],
-  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-d418651b74c28800.js"],
+  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-bbb1b6ce3591f2bc.js"],
   "/withRouter": [
-    "static\u002Fchunks\u002Fpages\u002FwithRouter-0bdc53cca41bd0de.js"
+    "static\u002Fchunks\u002Fpages\u002FwithRouter-fe8c9c0a49e02825.js"
   ],
   sortedPages: [
     "\u002F",
Diff for _app-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [888],
   {
-    /***/ 3115: /***/ function(
+    /***/ 1113: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_app",
         function() {
-          return __webpack_require__(3079);
+          return __webpack_require__(6607);
         }
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 179], function() {
-      return __webpack_exec__(3115), __webpack_exec__(482);
+      return __webpack_exec__(1113), __webpack_exec__(6075);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for _error-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [820],
   {
-    /***/ 5374: /***/ function(
+    /***/ 3363: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_error",
         function() {
-          return __webpack_require__(2142);
+          return __webpack_require__(83);
         }
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function() {
-      return __webpack_exec__(5374);
+      return __webpack_exec__(3363);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for amp-HASH.js
@@ -1,17 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [216],
   {
-    /***/ 8510: /***/ function(
+    /***/ 8753: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(4629);
+      module.exports = __webpack_require__(2059);
 
       /***/
     },
 
-    /***/ 7010: /***/ function(
+    /***/ 5348: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -19,7 +19,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/amp",
         function() {
-          return __webpack_require__(7681);
+          return __webpack_require__(5030);
         }
       ]);
       if (false) {
@@ -28,7 +28,7 @@
       /***/
     },
 
-    /***/ 4629: /***/ function(module, exports, __webpack_require__) {
+    /***/ 2059: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -38,8 +38,8 @@
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
       var _react = _interop_require_default(__webpack_require__(959));
-      var _ampContext = __webpack_require__(5667);
-      var _ampMode = __webpack_require__(5997);
+      var _ampContext = __webpack_require__(3677);
+      var _ampMode = __webpack_require__(9790);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampMode).isInAmpMode(
@@ -61,7 +61,7 @@
       /***/
     },
 
-    /***/ 7681: /***/ function(
+    /***/ 5030: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -78,7 +78,7 @@
         /* harmony export */
       });
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        8510
+        8753
       );
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(
         next_amp__WEBPACK_IMPORTED_MODULE_0__
@@ -102,7 +102,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function() {
-      return __webpack_exec__(7010);
+      return __webpack_exec__(5348);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for css-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [706],
   {
-    /***/ 860: /***/ function(
+    /***/ 6437: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function() {
-          return __webpack_require__(319);
+          return __webpack_require__(6558);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 319: /***/ function(
+    /***/ 6558: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -29,7 +29,7 @@
         1527
       );
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
-        1483
+        3490
       );
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/ __webpack_require__.n(
         _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -49,7 +49,7 @@
       /***/
     },
 
-    /***/ 1483: /***/ function(module) {
+    /***/ 3490: /***/ function(module) {
       // extracted by mini-css-extract-plugin
       module.exports = { helloWorld: "css_helloWorld__qqNwY" };
 
@@ -62,7 +62,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function() {
-      return __webpack_exec__(860);
+      return __webpack_exec__(6437);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [739],
   {
-    /***/ 3995: /***/ function(
+    /***/ 7753: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/dynamic",
         function() {
-          return __webpack_require__(956);
+          return __webpack_require__(4700);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6481: /***/ function(
+    /***/ 9704: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -34,7 +34,7 @@
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
       var _react = _interop_require_default(__webpack_require__(959));
-      var _noSsrError = __webpack_require__(7280);
+      var _noSsrError = __webpack_require__(2854);
       function NoSSR(param) {
         let { children } = param;
         if (false) {
@@ -50,7 +50,7 @@
       /***/
     },
 
-    /***/ 2382: /***/ function(module, exports, __webpack_require__) {
+    /***/ 8905: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -65,8 +65,8 @@
         6687
       ) /* ["default"] */.Z;
       var _react = _interop_require_wildcard(__webpack_require__(959));
-      var _loadable = _interop_require_default(__webpack_require__(8939));
-      var _dynamicNoSsr = _interop_require_default(__webpack_require__(6481));
+      var _loadable = _interop_require_default(__webpack_require__(6620));
+      var _dynamicNoSsr = _interop_require_default(__webpack_require__(9704));
       function dynamic(dynamicOptions, options) {
         let loadableFn = _loadable.default;
         let loadableOptions = {
@@ -171,7 +171,7 @@
       /***/
     },
 
-    /***/ 9259: /***/ function(
+    /***/ 5553: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -194,7 +194,7 @@
       /***/
     },
 
-    /***/ 8939: /***/ function(
+    /***/ 6620: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -209,7 +209,7 @@
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
       var _react = _interop_require_default(__webpack_require__(959));
-      var _loadableContext = __webpack_require__(9259);
+      var _loadableContext = __webpack_require__(5553);
       const ALL_INITIALIZERS = [];
       const READY_INITIALIZERS = [];
       let initialized = false;
@@ -428,7 +428,7 @@
       /***/
     },
 
-    /***/ 956: /***/ function(
+    /***/ 4700: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -445,7 +445,7 @@
         1527
       );
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
-        6113
+        2677
       );
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/ __webpack_require__.n(
         next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -454,11 +454,11 @@
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 485)
-            .then(__webpack_require__.bind(__webpack_require__, 1485)),
+            .e(/* import() */ 188)
+            .then(__webpack_require__.bind(__webpack_require__, 5188)),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 1485]
+            webpack: () => [/*require.resolve*/ 5188]
           }
         }
       );
@@ -485,12 +485,12 @@
       /***/
     },
 
-    /***/ 6113: /***/ function(
+    /***/ 2677: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(2382);
+      module.exports = __webpack_require__(8905);
 
       /***/
     }
@@ -501,7 +501,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function() {
-      return __webpack_exec__(3995);
+      return __webpack_exec__(7753);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [800],
   {
-    /***/ 6219: /***/ function(
+    /***/ 6027: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/edge-ssr",
         function() {
-          return __webpack_require__(7434);
+          return __webpack_require__(8824);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 7434: /***/ function(
+    /***/ 8824: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -50,7 +50,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function() {
-      return __webpack_exec__(6219);
+      return __webpack_exec__(6027);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [645],
   {
-    /***/ 2899: /***/ function(
+    /***/ 6955: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/head",
         function() {
-          return __webpack_require__(5826);
+          return __webpack_require__(1904);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 5826: /***/ function(
+    /***/ 1904: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -35,7 +35,7 @@
         1527
       );
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
-        8412
+        9046
       );
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/ __webpack_require__.n(
         next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -69,12 +69,12 @@
       /***/
     },
 
-    /***/ 8412: /***/ function(
+    /***/ 9046: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(8950);
+      module.exports = __webpack_require__(8048);
 
       /***/
     }
@@ -85,7 +85,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function() {
-      return __webpack_exec__(2899);
+      return __webpack_exec__(6955);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [757],
   {
-    /***/ 2304: /***/ function(
+    /***/ 7819: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/hooks",
         function() {
-          return __webpack_require__(8562);
+          return __webpack_require__(526);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 8562: /***/ function(
+    /***/ 526: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -83,7 +83,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function() {
-      return __webpack_exec__(2304);
+      return __webpack_exec__(7819);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [358],
   {
-    /***/ 5885: /***/ function(
+    /***/ 801: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function() {
-          return __webpack_require__(5591);
+          return __webpack_require__(7615);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6825: /***/ function(module, exports, __webpack_require__) {
+    /***/ 4315: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
       "use client";
@@ -36,12 +36,12 @@
         6239
       ) /* ["default"] */.Z;
       var _react = _interop_require_wildcard(__webpack_require__(959));
-      var _head = _interop_require_default(__webpack_require__(8950));
-      var _imageBlurSvg = __webpack_require__(3656);
-      var _imageConfig = __webpack_require__(2209);
-      var _imageConfigContext = __webpack_require__(6295);
-      var _warnOnce = __webpack_require__(4114);
-      var _imageLoader = _interop_require_default(__webpack_require__(318));
+      var _head = _interop_require_default(__webpack_require__(8048));
+      var _imageBlurSvg = __webpack_require__(8223);
+      var _imageConfig = __webpack_require__(6010);
+      var _imageConfigContext = __webpack_require__(4158);
+      var _warnOnce = __webpack_require__(4334);
+      var _imageLoader = _interop_require_default(__webpack_require__(1568));
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
         imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
@@ -674,7 +674,7 @@
       /***/
     },
 
-    /***/ 3656: /***/ function(__unused_webpack_module, exports) {
+    /***/ 8223: /***/ function(__unused_webpack_module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -712,7 +712,7 @@
       /***/
     },
 
-    /***/ 318: /***/ function(__unused_webpack_module, exports) {
+    /***/ 1568: /***/ function(__unused_webpack_module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -743,7 +743,7 @@
       /***/
     },
 
-    /***/ 5591: /***/ function(
+    /***/ 7615: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -764,8 +764,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(1527);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/image.js
-      var next_image = __webpack_require__(3960);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/image.js
+      var next_image = __webpack_require__(8249);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // CONCATENATED MODULE: ./pages/nextjs.png
       /* harmony default export */ var nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -795,12 +795,12 @@
       /***/
     },
 
-    /***/ 3960: /***/ function(
+    /***/ 8249: /***/ functio
Post job cleanup.
[command]/usr/bin/git version
git version 2.38.1
Temporarily overriding HOME='/home/runner/work/_temp/503f4a3f-7c60-4db8-9cf7-9f318c014b49' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/bin/git config --global --add safe.directory /home/runner/work/next.js/next.js
[command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
[command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
http.https://github.com/.extraheader
[command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Cleaning up orphan processes
Commit: fe8f998b859c3395414e5f6f0d2fcb285c7488b4

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes as this needs updating elsewhere as well as discussed in Slack

@volnei
Copy link

volnei commented Oct 18, 2022

Please, there are plans to merge it?

@ijjk ijjk force-pushed the canary branch 3 times, most recently from df8579c to 47e5ebe Compare October 25, 2022 16:15
@controversial
Copy link
Contributor

Would this fix #38302?

@eric-burel
Copy link
Contributor

Would this fix #38302?

it should yes, I've closed my initial PR that was just a try to write some tests in favour of this one

@controversial
Copy link
Contributor

Actually, looking more closely, I’m pretty sure this PR won’t solve the issue with edge API routes; the diff seems pretty specific to the next.config.js headers config scenario

@ijjk ijjk force-pushed the canary branch 2 times, most recently from e078ebe to 6b863fe Compare December 2, 2022 05:49
@timneutkens timneutkens requested a review from styfle as a code owner December 13, 2022 11:11
@ijjk ijjk added area: documentation examples Issue was opened via the examples template. labels Dec 13, 2022
@jzxhuang
Copy link

Bumping this, would be great to see this fixed and merged! Not being able to set more than one cookie in Edge API route is... a pretty big blocker to using them for many cases 😅

At a glance it looks like the changes in packages/next/server/server-route-utils.ts would directly address the edge API routes, though there's no direct tests for them. Maybe adding an integration test for an edge API route that sets 2 cookies would do the trick? 🤞

@timneutkens timneutkens added the created-by: Next.js team PRs by the Next.js team. label Jan 1, 2023
@ijjk ijjk requested a review from feedthejim as a code owner March 2, 2023 23:39
it('should handle multiple Set-Cookie', async () => {
const res = await fetchViaHTTP(appPort, '/multi-set-cookie')
expect(res.headers.get('Set-Cookie')).toBe(
'firstCookie=cookie1; Path=/, secondCookie=cookie2; Path=/'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that this is not explicitly checking that two distinct Set-Cookie headers are being sent. It looks like this fetchViaHTTP() function is using node-fetch under the hood, so you could use res.headers.raw() to get the full array and validate against that instead.

@balazsorban44
Copy link
Member Author

Superseded by #47718

timneutkens pushed a commit that referenced this pull request Mar 31, 2023
## What

This fix serves to address issues where multiple `Set-Cookie` headers
were combined in some runtimes.

## Why

This is because `set-cookie` behaves differently than other headers in
some cases.

Eg. when iterating on a `Headers` instance, multiple set-cookie headers
are folded. To set them correctly, we need to split them. But it'd not
be enough to naively split on the first occurrence, because `,` is a
valid cookie value when for example it's used in `Expires` in a date
string.

So we use a method to correctly detect where to split the cookie.

This should fix all runtimes.

Note, the spec now has `Headers#getSetCookie` which should be preferred
if it's present. whatwg/fetch#1346. We are using
the [`edge-runtime`](https://github.com/vercel/edge-runtime), so this
should be fixed upstream and then reused in Next.js in the future.

## How

Wherever we can, we reuse the `fromNodeHeaders` and `toNodeHeaders`
methods that have the correct implementation. This should be preferred
in the future in other parts of the codebase. We fixed some related TS
issues as well.

Fixes #46579, supersedes #40579
fix NEXT-735 ([link](https://linear.app/vercel/issue/NEXT-735))

---------

Co-authored-by: Balázs Orbán <[email protected]>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 30, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
created-by: Next.js team PRs by the Next.js team. examples Issue was opened via the examples template. type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[NEXT-582] Unable to define multiple Set-Cookie headers via config headers
8 participants