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: Invoke cancel, only if the stream is not closed #55684

Merged

Conversation

icyJoseph
Copy link
Contributor

What?

Attempt at fixing #55608

How?

Guard the call to stream cancel, by checking if the stream's not already closed

Fixes #55608

Not sure how to test this one. e2e perhaps?

it fixes specifically the error triggered on this reproduction repo: https://github.com/willianrod/next-readable-stream-error

@ijjk
Copy link
Member

ijjk commented Sep 20, 2023

Allow CI Workflow Run

  • approve CI run for commit: aad32e9

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

1 similar comment
@ijjk
Copy link
Member

ijjk commented Sep 20, 2023

Allow CI Workflow Run

  • approve CI run for commit: aad32e9

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

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

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 0   low 0   info 0 View in Orca

@huozhi huozhi added the CI approved Approve running CI for fork label Sep 20, 2023
@ijjk
Copy link
Member

ijjk commented Sep 20, 2023

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
buildDuration 13.9s 14.5s ⚠️ +608ms
buildDurationCached 7.3s 6.4s -902ms
nodeModulesSize 143 MB 143 MB ⚠️ +816 B
nextStartRea..uration (ms) 532ms 533ms ⚠️ +1ms
Client Bundles (main, webpack) Overall decrease ✓
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
262-HASH.js gzip 26.5 kB 26.5 kB -6 B
3f784ff6-HASH.js gzip 50.8 kB 50.8 kB -1 B
457.HASH.js gzip 185 B 181 B -4 B
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 242 B 238 B -4 B
main-HASH.js gzip 31.6 kB 31.6 kB ⚠️ +7 B
webpack-HASH.js gzip 1.69 kB 1.69 kB
Overall change 156 kB 156 kB -8 B
Legacy Client Bundles (polyfills)
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
_app-HASH.js gzip 195 B 195 B
_error-HASH.js gzip 182 B 180 B -2 B
amp-HASH.js gzip 508 B 504 B -4 B
css-HASH.js gzip 322 B 323 B ⚠️ +1 B
dynamic-HASH.js gzip 2.5 kB 2.5 kB ⚠️ +4 B
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 350 B 349 B -1 B
hooks-HASH.js gzip 369 B 369 B
image-HASH.js gzip 4.3 kB 4.29 kB -2 B
index-HASH.js gzip 256 B 256 B
link-HASH.js gzip 2.62 kB 2.62 kB
routerDirect..HASH.js gzip 311 B 310 B -1 B
script-HASH.js gzip 384 B 383 B -1 B
withRouter-HASH.js gzip 306 B 308 B ⚠️ +2 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 13 kB 13 kB -4 B
Client Build Manifests Overall increase ⚠️
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
_buildManifest.js gzip 483 B 485 B ⚠️ +2 B
Overall change 483 B 485 B ⚠️ +2 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
index.html gzip 513 B 513 B
link.html gzip 527 B 526 B -1 B
withRouter.html gzip 507 B 507 B
Overall change 1.55 kB 1.55 kB -1 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
edge-ssr.js gzip 90.2 kB 90.2 kB ⚠️ +13 B
page.js gzip 156 kB 156 kB ⚠️ +20 B
Overall change 247 kB 247 kB ⚠️ +33 B
Middleware size Overall increase ⚠️
vercel/next.js canary icyJoseph/next.js fix/guard-stream-cancel-calls-if-closed Change
middleware-b..fest.js gzip 622 B 623 B ⚠️ +1 B
middleware-r..fest.js gzip 152 B 151 B -1 B
middleware.js gzip 23.1 kB 23.1 kB ⚠️ +5 B
edge-runtime..pack.js gzip 1.83 kB 1.83 kB
Overall change 25.7 kB 25.7 kB ⚠️ +5 B

Diffs

Diff for page.js

Diff too large to display

Diff for middleware-b..-manifest.js
@@ -7,96 +7,96 @@ self.__BUILD_MANIFEST = {
     "static/BUILD_ID/_ssgManifest.js",
   ],
   rootMainFiles: [
-    "static/chunks/webpack-b5a24d3136884549.js",
-    "static/chunks/3f784ff6-f38a800f03d35672.js",
-    "static/chunks/262-df26b7ab3a02d6a2.js",
-    "static/chunks/main-app-5f8e270fe7d4bb37.js",
+    "static/chunks/webpack-81f4b405ce334c8c.js",
+    "static/chunks/3c4a14c2-a67be9e836cb315c.js",
+    "static/chunks/923-5b4c59c8ae0b7d53.js",
+    "static/chunks/main-app-5bf7bb1724a1f1a9.js",
   ],
   pages: {
     "/": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/index-b2b9d58bb4380c57.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/index-56e3ac6d9944327c.js",
     ],
     "/_app": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/_app-3ecc4e6683a3e818.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/_app-6b8a2eb15cf301db.js",
     ],
     "/_error": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/_error-73b337e1fabbf8b0.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/_error-dc563b17bc4f0eb4.js",
     ],
     "/amp": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/amp-ad170e63165bcb16.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/amp-89750b000c56b78f.js",
     ],
     "/css": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
       "static/css/ded6b86ab9cc0a1f.css",
-      "static/chunks/pages/css-4fd74c65efdfd79c.js",
+      "static/chunks/pages/css-b9418d2c95288610.js",
     ],
     "/dynamic": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/dynamic-074c60be6419667f.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/dynamic-7c8860bce4bee381.js",
     ],
     "/edge-ssr": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/edge-ssr-8a52bf4e078f7da8.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/edge-ssr-86fe4ee2ed5b8c09.js",
     ],
     "/head": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/head-16a40a571f7922f3.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/head-8642f7c3306db030.js",
     ],
     "/hooks": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/hooks-186d4c978ee5b5ed.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/hooks-b4f516d19c1a43f3.js",
     ],
     "/image": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/image-545bea58a58e051c.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/image-23baacf7d5bedc1f.js",
     ],
     "/link": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/link-ceb377352ce430c0.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/link-e9c4c4135c794b01.js",
     ],
     "/routerDirect": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/routerDirect-010b700b447ef851.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/routerDirect-d14ac65d0d85cd2b.js",
     ],
     "/script": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/script-945ca210a43db8d7.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/script-34129155941dfd88.js",
     ],
     "/withRouter": [
-      "static/chunks/webpack-b5a24d3136884549.js",
+      "static/chunks/webpack-81f4b405ce334c8c.js",
       "static/chunks/framework-114cbddc60b679b8.js",
-      "static/chunks/main-1c115769b0b34ed9.js",
-      "static/chunks/pages/withRouter-7c87113cea022c14.js",
+      "static/chunks/main-da42e991dc0f55c4.js",
+      "static/chunks/pages/withRouter-60b5066078530f25.js",
     ],
   },
   ampFirstPages: [],
Diff for middleware-r..-manifest.js
@@ -1,2 +1,2 @@
 self.__REACT_LOADABLE_MANIFEST =
-  '{"dynamic.js -> ../components/hello":{"id":6179,"files":["static/chunks/457.2cec5ff81e925b06.js"]}}';
+  '{"dynamic.js -> ../components/hello":{"id":7824,"files":["static/chunks/824.579db1d8e8da1528.js"]}}';
Diff for middleware.js
@@ -2,7 +2,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [826],
   {
-    /***/ 4547: /***/ (
+    /***/ 4135: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -22,7 +22,7 @@
       __webpack_require__.r(middleware_namespaceObject);
       __webpack_require__.d(middleware_namespaceObject, {
         default: () => middleware,
-      }); // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/globals.js
+      }); // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/globals.js
 
       async function registerInstrumentation() {
         if (
@@ -92,7 +92,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         // Eagerly fire instrumentation hook to make the startup faster.
         void ensureInstrumentationRegistered();
       }
-      enhanceGlobals(); //# sourceMappingURL=globals.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/error.js
+      enhanceGlobals(); //# sourceMappingURL=globals.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/error.js
 
       class PageSignatureError extends Error {
         constructor({ page }) {
@@ -119,7 +119,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
   Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent
   `);
         }
-      } //# sourceMappingURL=error.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/utils.js
+      } //# sourceMappingURL=error.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/utils.js
 
       /**
        * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any
@@ -254,7 +254,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             }
           );
         }
-      } //# sourceMappingURL=utils.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
+      } //# sourceMappingURL=utils.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
 
       const responseSymbol = Symbol("response");
       const passThroughSymbol = Symbol("passThrough");
@@ -300,7 +300,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             page: this.sourcePage,
           });
         }
-      } //# sourceMappingURL=fetch-event.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
+      } //# sourceMappingURL=fetch-event.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
 
       function detectDomainLocale(domainItems, hostname, detectedLocale) {
         if (!domainItems) return;
@@ -326,7 +326,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             return item;
           }
         }
-      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
+      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -336,7 +336,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
        *   - `/` -> `/`
        */ function removeTrailingSlash(route) {
         return route.replace(/\/$/, "") || "/";
-      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
+      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -364,7 +364,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           query: "",
           hash: "",
         };
-      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
+      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -375,7 +375,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         }
         const { pathname, query, hash } = parsePath(path);
         return "" + prefix + pathname + query + hash;
-      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
+      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -387,7 +387,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         }
         const { pathname, query, hash } = parsePath(path);
         return "" + pathname + suffix + query + hash;
-      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
+      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -401,7 +401,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         }
         const { pathname } = parsePath(path);
         return pathname === prefix || pathname.startsWith(prefix + "/");
-      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
+      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -420,7 +420,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         }
         // Add the locale prefix to the path.
         return addPathPrefix(path, "/" + locale);
-      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
+      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
 
       function formatNextPathnameInfo(info) {
         let pathname = addLocale(
@@ -444,7 +444,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             ? addPathSuffix(pathname, "/")
             : pathname
           : removeTrailingSlash(pathname);
-      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/get-hostname.js
+      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/get-hostname.js
 
       /**
        * Takes an object with a hostname property (like a parsed URL) and some
@@ -464,7 +464,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           hostname = parsed.hostname;
         } else return;
         return hostname.toLowerCase();
-      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
+      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -494,7 +494,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           pathname,
           detectedLocale,
         };
-      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
+      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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
@@ -528,7 +528,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         // If the path without the prefix doesn't start with a `/` we need to add it
         // back to the path to make sure it's a valid path.
         return "/" + withoutPrefix;
-      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
 
       function getNextPathnameInfo(pathname, options) {
         var _options_nextConfig;
@@ -586,7 +586,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           }
         }
         return info;
-      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/next-url.js
+      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/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)/;
@@ -813,8 +813,8 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         }
       } //# sourceMappingURL=next-url.js.map
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js
-      var _edge_runtime_cookies = __webpack_require__(1278); // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/request.js
+      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js
+      var _edge_runtime_cookies = __webpack_require__(7252); // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/request.js
       //# sourceMappingURL=cookies.js.map
 
       const INTERNALS = Symbol("internal request");
@@ -891,7 +891,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         get url() {
           return this[INTERNALS].url;
         }
-      } //# sourceMappingURL=request.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/response.js
+      } //# sourceMappingURL=request.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/response.js
 
       const response_INTERNALS = Symbol("internal response");
       const REDIRECTS = new Set([301, 302, 303, 307, 308]);
@@ -989,7 +989,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             headers,
           });
         }
-      } //# sourceMappingURL=response.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
+      } //# sourceMappingURL=response.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
 
       /**
        * Given a URL as a string and a base URL it will make the URL relative
@@ -1002,7 +1002,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         return relative.protocol + "//" + relative.host === origin
           ? relative.toString().replace(origin, "")
           : relative.toString();
-      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/client/components/app-router-headers.js
+      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/client/components/app-router-headers.js
 
       const RSC = "RSC";
       const ACTION = "Next-Action";
@@ -1023,7 +1023,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         [NEXT_ROUTER_STATE_TREE],
         [NEXT_ROUTER_PREFETCH],
       ];
-      const NEXT_RSC_UNION_QUERY = "_rsc"; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/internal-utils.js
+      const NEXT_RSC_UNION_QUERY = "_rsc"; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/internal-utils.js
 
       const INTERNAL_QUERY_NAMES = [
         "__nextFallback",
@@ -1072,7 +1072,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         for (const key of INTERNAL_HEADERS) {
           delete headers[key];
         }
-      } //# sourceMappingURL=internal-utils.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
+      } //# sourceMappingURL=internal-utils.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
 
       /**
        * Normalizes an app route so it represents the actual request path. Essentially
@@ -1123,7 +1123,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
        * Since this function is used on full urls it checks `?` for searchParams handling.
        */ function normalizeRscPath(pathname, enabled) {
         return enabled ? pathname.replace(/\.rsc($|\?)/, "$1") : pathname;
-      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/lib/constants.js
+      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/lib/constants.js
 
       const NEXT_QUERY_PARAM_PREFIX = "nxtP";
       const PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
@@ -1288,7 +1288,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         metadata: "__next_metadata__",
         metadataRoute: "__next_metadata_route__",
         metadataImageMeta: "__next_metadata_image_meta__",
-      }; // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js
+      }; // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js
       //# sourceMappingURL=constants.js.map
 
       class ReflectAdapter {
@@ -1308,7 +1308,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         static deleteProperty(target, prop) {
           return Reflect.deleteProperty(target, prop);
         }
-      } //# sourceMappingURL=reflect.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js
+      } //# sourceMappingURL=reflect.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js
 
       /**
        * @internal
@@ -1489,7 +1489,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         [Symbol.iterator]() {
           return this.entries();
         }
-      } //# sourceMappingURL=headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/adapters/request-cookies.js
+      } //# sourceMappingURL=headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/spec-extension/adapters/request-cookies.js
 
       /**
        * @internal
@@ -1622,7 +1622,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             },
           });
         }
-      } //# sourceMappingURL=request-cookies.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/api-utils/index.js
+      } //# sourceMappingURL=request-cookies.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/api-utils/index.js
 
       /**
        *
@@ -1677,7 +1677,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         if (SYMBOL_CLEARED_COOKIES in res) {
           return res;
         }
-        const { serialize } = __webpack_require__(8957);
+        const { serialize } = __webpack_require__(1835);
         const previous = res.getHeader("Set-Cookie");
         res.setHeader(`Set-Cookie`, [
           ...(typeof previous === "string"
@@ -1774,7 +1774,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             });
           },
         });
-      } //# sourceMappingURL=index.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/async-storage/draft-mode-provider.js
+      } //# sourceMappingURL=index.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/async-storage/draft-mode-provider.js
 
       class DraftModeProvider {
         constructor(previewProps, req, cookies, mutableCookies) {
@@ -1827,7 +1827,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
             expires: new Date(0),
           });
         }
-      } //# sourceMappingURL=draft-mode-provider.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/async-storage/request-async-storage-wrapper.js
+      } //# sourceMappingURL=draft-mode-provider.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/async-storage/request-async-storage-wrapper.js
 
       function getHeaders(headers) {
         const cleaned = HeadersAdapter.from(headers);
@@ -1912,10 +1912,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         },
       }; //# sourceMappingURL=request-async-storage-wrapper.js.map
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/client/components/async-local-storage.js
-      var async_local_storage = __webpack_require__(242); // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/client/components/request-async-storage.external.js
+      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/client/components/async-local-storage.js
+      var async_local_storage = __webpack_require__(4274); // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/client/components/request-async-storage.external.js
       const requestAsyncStorage = (0,
-      async_local_storage /* createAsyncLocalStorage */.P)(); //# sourceMappingURL=request-async-storage.external.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/adapter.js
+      async_local_storage /* createAsyncLocalStorage */.P)(); //# sourceMappingURL=request-async-storage.external.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/adapter.js
 
       class NextRequestHint extends NextRequest {
         constructor(params) {
@@ -2178,14 +2178,14 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           response: finalResponse,
           waitUntil: Promise.all(event[waitUntilSymbol]),
         };
-      } //# sourceMappingURL=adapter.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/exports/next-response.js // CONCATENATED MODULE: ./middleware.js
+      } //# sourceMappingURL=adapter.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/esm/server/web/exports/next-response.js // CONCATENATED MODULE: ./middleware.js
 
       // This file is for modularized imports for next/server to get fully-treeshaking.
       //# sourceMappingURL=next-response.js.map
 
       async function middleware() {
         return NextResponse.next();
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-statsSJ2DbC%2Fstats-app&matchers=&preferredRegion=&middlewareConfig=e30%3D!
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-statsSJ2DbC%2Fstats-app&matchers=&preferredRegion=&middlewareConfig=e30%3D!
 
       const mod = { ...middleware_namespaceObject };
       const handler = mod.middleware || mod.default;
@@ -2209,7 +2209,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 1278: /***/ (module) => {
+    /***/ 7252: /***/ (module) => {
       "use strict";
 
       var __defProp = Object.defineProperty;
@@ -2610,7 +2610,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 8957: /***/ (module) => {
+    /***/ 1835: /***/ (module) => {
       "use strict";
       var __dirname = "/";
 
@@ -2740,7 +2740,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 242: /***/ (
+    /***/ 4274: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -2786,7 +2786,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__(4547);
+    /******/ var __webpack_exports__ = __webpack_exec__(4135);
     /******/ (_ENTRIES =
       typeof _ENTRIES === "undefined" ? {} : _ENTRIES).middleware_middleware =
       __webpack_exports__;
Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -1,28 +1,28 @@
 self.__BUILD_MANIFEST = {
   __rewrites: { afterFiles: [], beforeFiles: [], fallback: [] },
-  "/": ["static\u002Fchunks\u002Fpages\u002Findex-b2b9d58bb4380c57.js"],
-  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-73b337e1fabbf8b0.js"],
-  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-ad170e63165bcb16.js"],
+  "/": ["static\u002Fchunks\u002Fpages\u002Findex-56e3ac6d9944327c.js"],
+  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-dc563b17bc4f0eb4.js"],
+  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-89750b000c56b78f.js"],
   "/css": [
     "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-    "static\u002Fchunks\u002Fpages\u002Fcss-4fd74c65efdfd79c.js",
+    "static\u002Fchunks\u002Fpages\u002Fcss-b9418d2c95288610.js",
   ],
   "/dynamic": [
-    "static\u002Fchunks\u002Fpages\u002Fdynamic-074c60be6419667f.js",
+    "static\u002Fchunks\u002Fpages\u002Fdynamic-7c8860bce4bee381.js",
   ],
   "/edge-ssr": [
-    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-8a52bf4e078f7da8.js",
+    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-86fe4ee2ed5b8c09.js",
   ],
-  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-16a40a571f7922f3.js"],
-  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-186d4c978ee5b5ed.js"],
-  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-545bea58a58e051c.js"],
-  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-ceb377352ce430c0.js"],
+  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-8642f7c3306db030.js"],
+  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-b4f516d19c1a43f3.js"],
+  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-23baacf7d5bedc1f.js"],
+  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-e9c4c4135c794b01.js"],
   "/routerDirect": [
-    "static\u002Fchunks\u002Fpages\u002FrouterDirect-010b700b447ef851.js",
+    "static\u002Fchunks\u002Fpages\u002FrouterDirect-d14ac65d0d85cd2b.js",
   ],
-  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-945ca210a43db8d7.js"],
+  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-34129155941dfd88.js"],
   "/withRouter": [
-    "static\u002Fchunks\u002Fpages\u002FwithRouter-7c87113cea022c14.js",
+    "static\u002Fchunks\u002Fpages\u002FwithRouter-60b5066078530f25.js",
   ],
   sortedPages: [
     "\u002F",
Diff for _app-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [888],
   {
-    /***/ 7108: /***/ function (
+    /***/ 1424: /***/ 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__(6895);
+          return __webpack_require__(3024);
         },
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 179], function () {
-      return __webpack_exec__(7108), __webpack_exec__(9285);
+      return __webpack_exec__(1424), __webpack_exec__(6509);
     });
     /******/ 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],
   {
-    /***/ 2665: /***/ function (
+    /***/ 630: /***/ 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__(2838);
+          return __webpack_require__(440);
         },
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function () {
-      return __webpack_exec__(2665);
+      return __webpack_exec__(630);
     });
     /******/ 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],
   {
-    /***/ 1571: /***/ function (
+    /***/ 1158: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(3653);
+      module.exports = __webpack_require__(6333);
 
       /***/
     },
 
-    /***/ 4273: /***/ function (
+    /***/ 8255: /***/ 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__(4140);
+          return __webpack_require__(512);
         },
       ]);
       if (false) {
@@ -28,7 +28,7 @@
       /***/
     },
 
-    /***/ 3653: /***/ function (module, exports, __webpack_require__) {
+    /***/ 6333: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -44,8 +44,8 @@
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(959)
       );
-      const _ampcontextsharedruntime = __webpack_require__(3837);
-      const _ampmode = __webpack_require__(8025);
+      const _ampcontextsharedruntime = __webpack_require__(4661);
+      const _ampmode = __webpack_require__(6524);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampmode.isInAmpMode)(
@@ -67,7 +67,7 @@
       /***/
     },
 
-    /***/ 4140: /***/ function (
+    /***/ 512: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -84,7 +84,7 @@
         /* harmony export */
       });
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(1571);
+        __webpack_require__(1158);
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_amp__WEBPACK_IMPORTED_MODULE_0__
@@ -108,7 +108,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function () {
-      return __webpack_exec__(4273);
+      return __webpack_exec__(8255);
     });
     /******/ 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],
   {
-    /***/ 2094: /***/ function (
+    /***/ 7144: /***/ 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__(9373);
+          return __webpack_require__(5698);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 9373: /***/ function (
+    /***/ 5698: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -28,7 +28,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(443);
+        __webpack_require__(6264);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -48,7 +48,7 @@
       /***/
     },
 
-    /***/ 443: /***/ function (module) {
+    /***/ 6264: /***/ function (module) {
       // extracted by mini-css-extract-plugin
       module.exports = { helloWorld: "css_helloWorld__aUdUq" };
 
@@ -61,7 +61,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(2094);
+      return __webpack_exec__(7144);
     });
     /******/ 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],
   {
-    /***/ 8484: /***/ function (
+    /***/ 9816: /***/ 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__(4075);
+          return __webpack_require__(7205);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 3944: /***/ function (module, exports, __webpack_require__) {
+    /***/ 608: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -45,7 +45,7 @@
         __webpack_require__(959)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(362)
+        __webpack_require__(1186)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -146,7 +146,7 @@
       /***/
     },
 
-    /***/ 7902: /***/ function (
+    /***/ 9330: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -173,7 +173,7 @@
       /***/
     },
 
-    /***/ 362: /***/ function (
+    /***/ 1186: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -215,7 +215,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(959)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(7902);
+      const _loadablecontextsharedruntime = __webpack_require__(9330);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -450,7 +450,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 4075: /***/ function (
+    /***/ 7205: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -466,7 +466,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5620);
+        __webpack_require__(4438);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -475,11 +475,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 457)
-            .then(__webpack_require__.bind(__webpack_require__, 6179)),
+            .e(/* import() */ 824)
+            .then(__webpack_require__.bind(__webpack_require__, 7824)),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 6179],
+            webpack: () => [/*require.resolve*/ 7824],
           },
         }
       );
@@ -506,12 +506,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 5620: /***/ function (
+    /***/ 4438: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(3944);
+      module.exports = __webpack_require__(608);
 
       /***/
     },
@@ -522,7 +522,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(8484);
+      return __webpack_exec__(9816);
     });
     /******/ 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],
   {
-    /***/ 9835: /***/ function (
+    /***/ 7423: /***/ 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__(9247);
+          return __webpack_require__(8403);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 9247: /***/ function (
+    /***/ 8403: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -48,7 +48,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function () {
-      return __webpack_exec__(9835);
+      return __webpack_exec__(7423);
     });
     /******/ 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],
   {
-    /***/ 3365: /***/ function (
+    /***/ 4278: /***/ 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__(7060);
+          return __webpack_require__(7894);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 7060: /***/ function (
+    /***/ 7894: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -34,7 +34,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2022);
+        __webpack_require__(4469);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -68,12 +68,12 @@
       /***/
     },
 
-    /***/ 2022: /***/ function (
+    /***/ 4469: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(9273);
+      module.exports = __webpack_require__(8436);
 
       /***/
     },
@@ -84,7 +84,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(3365);
+      return __webpack_exec__(4278);
     });
     /******/ 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],
   {
-    /***/ 5315: /***/ function (
+    /***/ 5046: /***/ 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__(8015);
+          return __webpack_require__(5882);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 8015: /***/ function (
+    /***/ 5882: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -79,7 +79,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(5315);
+      return __webpack_exec__(5046);
     });
     /******/ 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],
   {
-    /***/ 1552: /***/ function (
+    /***/ 4070: /***/ 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__(5995);
+          return __webpack_require__(2456);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6368: /***/ function (module, exports, __webpack_require__) {
+    /***/ 6467: /***/ function (module, exports, __webpack_require__) {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -39,15 +39,15 @@
         __webpack_require__(422)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9273)
+        __webpack_require__(8436)
       );
-      const _getimgprops = __webpack_require__(5669);
-      const _imageconfig = __webpack_require__(7190);
-      const _imageconfigcontextsharedruntime = __webpack_require__(9590);
-      const _warnonce = __webpack_require__(2884);
-      const _routercontextsharedruntime = __webpack_require__(9850);
+      const _getimgprops = __webpack_require__(4728);
+      const _imageconfig = __webpack_require__(9674);
+      const _imageconfigcontextsharedruntime = __webpack_require__(4177);
+      const _warnonce = __webpack_require__(486);
+      const _routercontextsharedruntime = __webpack_require__(2315);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2396)
+        __webpack_require__(4229)
       );
       // This is replaced by webpack define plugin
       const configEnv = {
@@ -372,7 +372,7 @@
       /***/
     },
 
-    /***/ 5669: /***/ function (
+    /***/ 4728: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -388,9 +388,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(2884);
-      const _imageblursvg = __webpack_require__(3927);
-      const _imageconfig = __webpack_require__(7190);
+      const _warnonce = __webpack_require__(486);
+      const _imageblursvg = __webpack_require__(1869);
+      const _imageconfig = __webpack_require__(9674);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -759,7 +759,7 @@
       /***/
     },
 
-    /***/ 3927: /***/ function (__unused_webpack_module, exports) {
+    /***/ 1869: /***/ function (__unused_webpack_module, exports) {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -814,7 +814,7 @@
       /***/
     },
 
-    /***/ 5129: /***/ function (
+    /***/ 1175: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -841,11 +841,11 @@
         },
       });
       const _interop_require_default = __webpack_require__(1351);
-      const _getimgprops = __webpack_require__(5669);
-      const _warnonce = __webpack_require__(2884);
-      const _imagecomponent = __webpack_require__(6368);
+      const _getimgprops = __webpack_require__(4728);
+      const _warnonce = __webpack_require__(486);
+      const _imagecomponent = __webpack_require__(6467);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2396)
+        __webpack_require__(4229)
       );
       const unstable_getImgProps = (imgProps) => {
         (0, _warnonce.warnOnce)(
@@ -877,7 +877,7 @@
       /***/
     },
 
-    /***/ 2396: /***/ function (__unused_webpack_module, exports) {
+    /***/ 4229: /***/ function (__unused_webpack_module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -912,7 +912,7 @@
       /***/
     },
 
-    /***/ 5995: /***/ function (
+    /***/ 2456: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -933,8 +933,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/[email protected][email protected]/node_modules/next/image.js
-      var next_image = __webpack_require__(1577);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected][email protected]/node_modules/next/image.js
+      var next_image = __webpack_require__(73);
       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",
@@ -964,12 +964,12 @@
       /***/
     },
 
-    /***/ 1577: /***/ function (
+    /***/ 73: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(5129);
+      module.exports = __webpack_require__(1175);
 
       /***/
     },
@@ -980,7 +980,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(1552);
+      return __webpack_exec__(4070);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [405],
   {
-    /***/ 7410: /***/ function (
+    /***/ 4990: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/",
         function () {
-          return __webpack_require__(9072);
+          return __webpack_require__(1283);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 9072: /***/ function (
+    /***/ 1283: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -44,7 +44,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 774, 179], function () {
-      return __webpack_exec__(7410);
+      return __webpack_exec__(4990);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [644],
   {
-    /***/ 1794: /***/ function (
+    /***/ 8959: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/link",
         function () {
-          return __webpack_require__(5004);
+          return __webpack_require__(5895);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 1551: /***/ function (module, exports) {
+    /***/ 877: /***/ function (module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -86,7 +86,7 @@
       /***/
     },
 
-    /***/ 9639: /***/ function (module, exports, __webpack_require__) {
+    /***/ 9787: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -98,7 +98,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(8683);
+      const _normalizetrailingslash = __webpack_require__(4983);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -122,7 +122,7 @@
       /***/
     },
 
-    /***/ 1596: /***/ function (module, exports, __webpack_require__) {
+    /***/ 811: /***/ function (module, exports, __webpack_require__) {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -138,17 +138,17 @@
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(959)
       );
-      const _resolvehref = __webpack_require__(3318);
-      const _islocalurl = __webpack_require__(8068);
-      const _formaturl = __webpack_require__(7506);
-      const _utils = __webpack_require__(7632);
-      const _addlocale = __webpack_require__(4964);
-      const _routercontextsharedruntime = __webpack_require__(9850);
-      const _approutercontextsharedruntime = __webpack_require__(9456);
-      const _useintersection = __webpack_require__(4683);
-      const _getdomainlocale = __webpack_require__(9639);
-      const _addbasepath = __webpack_require__(748);
-      const _routerreducertypes = __webpack_require__(1551);
+      const _resolvehref = __webpack_require__(8672);
+      const _islocalurl = __webpack_require__(5913);
+      const _formaturl = __webpack_require__(391);
+      const _utils = __webpack_require__(466);
+      const _addlocale = __webpack_require__(9841);
+      const _routercontextsharedruntime = __webpack_require__(2315);
+      const _approutercontextsharedruntime = __webpack_require__(7234);
+      const _useintersection = __webpack_require__(6947);
+      const _getdomainlocale = __webpack_require__(9787);
+      const _addbasepath = __webpack_require__(6374);
+      const _routerreducertypes = __webpack_require__(877);
       const prefetched = new Set();
       function prefetch(router, href, as, options, appOptions, isAppRouter) {
         if (false) {
@@ -567,7 +567,7 @@
       /***/
     },
 
-    /***/ 4683: /***/ function (module, exports, __webpack_require__) {
+    /***/ 6947: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -580,7 +580,7 @@
         },
       });
       const _react = __webpack_require__(959);
-      const _requestidlecallback = __webpack_require__(2258);
+      const _requestidlecallback = __webpack_require__(6424);
       const hasIntersectionObserver =
         typeof IntersectionObserver === "function";
       const observers = new Map();
@@ -693,7 +693,7 @@
       /***/
     },
 
-    /***/ 5004: /***/ function (
+    /***/ 5895: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -709,7 +709,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3639);
+        __webpack_require__(2075);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -740,12 +740,12 @@
       /***/
     },
 
-    /***/ 3639: /***/ function (
+    /***/ 2075: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(1596);
+      module.exports = __webpack_require__(811);
 
       /***/
     },
@@ -756,7 +756,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(1794);
+      return __webpack_exec__(8959);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [58],
   {
-    /***/ 5319: /***/ function (
+    /***/ 190: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(7170);
+          return __webpack_require__(6827);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 7170: /***/ function (
+    /***/ 6827: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -34,7 +34,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(975);
+        __webpack_require__(803);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -54,12 +54,12 @@
       /***/
     },
 
-    /***/ 975: /***/ function (
+    /***/ 803: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(9285);
+      module.exports = __webpack_require__(6509);
 
       /***/
     },
@@ -70,7 +70,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(5319);
+      return __webpack_exec__(190);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [797],
   {
-    /***/ 8857: /***/ function (
+    /***/ 769: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/script",
         function () {
-          return __webpack_require__(8585);
+          return __webpack_require__(9591);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 8585: /***/ function (
+    /***/ 9591: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -34,7 +34,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5169);
+        __webpack_require__(3633);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -67,12 +67,12 @@
       /***/
     },
 
-    /***/ 5169: /***/ function (
+    /***/ 3633: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(4259);
+      module.exports = __webpack_require__(1861);
 
       /***/
     },
@@ -83,7 +83,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(8857);
+      return __webpack_exec__(769);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [807],
   {
-    /***/ 626: /***/ function (
+    /***/ 5740: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/withRouter",
         function () {
-          return __webpack_require__(4511);
+          return __webpack_require__(1462);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 4511: /***/ function (
+    /***/ 1462: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -34,7 +34,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1527);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(975);
+        __webpack_require__(803);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -53,12 +53,12 @@
       /***/
     },
 
-    /***/ 975: /***/ function (
+    /***/ 803: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(9285);
+      module.exports = __webpack_require__(6509);
 
       /***/
     },
@@ -69,7 +69,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [774, 888, 179], function () {
-      return __webpack_exec__(626);
+      return __webpack_exec__(5740);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 262-HASH.js

Diff too large to display

Diff for 3f784ff6-HASH.js
@@ -1,8 +1,8 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [904],
+  [658],
   {
-    /***/ 4489: /***/ function (
+    /***/ 9234: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -19,8 +19,8 @@
       /*
  Modernizr 3.0.0pre (Custom Build) | MIT
 */
-      var aa = __webpack_require__(8288),
-        ba = __webpack_require__(6266),
+      var aa = __webpack_require__(4978),
+        ba = __webpack_require__(4794),
         ca = {
           usingClientEntryPoint: !1,
           Events: null,
Diff for 457.HASH.js
@@ -1,8 +1,8 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [457],
+  [824],
   {
-    /***/ 6179: /***/ function (
+    /***/ 7824: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
Diff for _not-found-3..7e06995e6.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [165],
   {
-    /***/ 1729: /***/ function (
+    /***/ 5194: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_not-found",
         function () {
-          return __webpack_require__(6987);
+          return __webpack_require__(7367);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6987: /***/ function (module, exports, __webpack_require__) {
+    /***/ 7367: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -32,7 +32,7 @@
       });
       const _interop_require_default = __webpack_require__(7295);
       const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8288)
+        __webpack_require__(4978)
       );
       const styles = {
         error: {
@@ -145,8 +145,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [904, 262, 744], function () {
-      return __webpack_exec__(1729);
+    /******/ __webpack_require__.O(0, [658, 923, 744], function () {
+      return __webpack_exec__(5194);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for page-4518b468bd746a80.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [760, 185, 952],
   {
-    /***/ 7488: /***/ function () {
+    /***/ 3775: /***/ function () {
       /***/
     },
   },
@@ -10,8 +10,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [904, 262, 744], function () {
-      return __webpack_exec__(7488);
+    /******/ __webpack_require__.O(0, [658, 923, 744], function () {
+      return __webpack_exec__(3775);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for page-9f4c2d1c3cf0526b.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [952, 185, 760],
   {
-    /***/ 7488: /***/ function () {
+    /***/ 3775: /***/ function () {
       /***/
     },
   },
@@ -10,8 +10,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [904, 262, 744], function () {
-      return __webpack_exec__(7488);
+    /******/ __webpack_require__.O(0, [658, 923, 744], function () {
+      return __webpack_exec__(3775);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for layout-cd185..79a7bb077.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [185, 952, 760],
   {
-    /***/ 7488: /***/ function () {
+    /***/ 3775: /***/ function () {
       /***/
     },
   },
@@ -10,8 +10,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [904, 262, 744], function () {
-      return __webpack_exec__(7488);
+    /******/ __webpack_require__.O(0, [658, 923, 744], function () {
+      return __webpack_exec__(3775);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,40 +1,40 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [744],
   {
-    /***/ 9469: /***/ function (
+    /***/ 412: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1462, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9618, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1371, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7930, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8680, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1921, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8281, 23)
+        __webpack_require__.t.bind(__webpack_require__, 2892, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1909, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1296, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3613, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4852, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6055, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4799, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9474, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5714, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2275)
+        __webpack_require__.bind(__webpack_require__, 5795)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7851, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7154, 23)
       );
 
       /***/
@@ -45,8 +45,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [904, 262], function () {
-      return __webpack_exec__(2893), __webpack_exec__(9469);
+    /******/ __webpack_require__.O(0, [658, 923], function () {
+      return __webpack_exec__(105), __webpack_exec__(412);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for webpack-HASH.js
@@ -219,7 +219,7 @@
     /******/ __webpack_require__.u = function (chunkId) {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "2cec5ff81e925b06" + ".js"
+        "static/chunks/" + chunkId + "." + "579db1d8e8da1528" + ".js"
       );
       /******/
     };
Diff for index.html
@@ -11,7 +11,7 @@
       src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"
     ></script>
     <script
-      src="/_next/static/chunks/webpack-b5a24d3136884549.js"
+      src="/_next/static/chunks/webpack-81f4b405ce334c8c.js"
       defer=""
     ></script>
     <script
@@ -19,15 +19,15 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-1c115769b0b34ed9.js"
+      src="/_next/static/chunks/main-da42e991dc0f55c4.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/_app-3ecc4e6683a3e818.js"
+      src="/_next/static/chunks/pages/_app-6b8a2eb15cf301db.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/index-b2b9d58bb4380c57.js"
+      src="/_next/static/chunks/pages/index-56e3ac6d9944327c.js"
       defer=""
     ></script>
     <script src="/_next/static/BUILD_ID/_buildManifest.js" defer=""></script>
Diff for link.html
@@ -11,7 +11,7 @@
       src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"
     ></script>
     <script
-      src="/_next/static/chunks/webpack-b5a24d3136884549.js"
+      src="/_next/static/chunks/webpack-81f4b405ce334c8c.js"
       defer=""
     ></script>
     <script
@@ -19,15 +19,15 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-1c115769b0b34ed9.js"
+      src="/_next/static/chunks/main-da42e991dc0f55c4.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/_app-3ecc4e6683a3e818.js"
+      src="/_next/static/chunks/pages/_app-6b8a2eb15cf301db.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/link-ceb377352ce430c0.js"
+      src="/_next/static/chunks/pages/link-e9c4c4135c794b01.js"
       defer=""
     ></script>
     <script src="/_next/static/BUILD_ID/_buildManifest.js" defer=""></script>
Diff for withRouter.html
@@ -11,7 +11,7 @@
       src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"
     ></script>
     <script
-      src="/_next/static/chunks/webpack-b5a24d3136884549.js"
+      src="/_next/static/chunks/webpack-81f4b405ce334c8c.js"
       defer=""
     ></script>
     <script
@@ -19,15 +19,15 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-1c115769b0b34ed9.js"
+      src="/_next/static/chunks/main-da42e991dc0f55c4.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/_app-3ecc4e6683a3e818.js"
+      src="/_next/static/chunks/pages/_app-6b8a2eb15cf301db.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/withRouter-7c87113cea022c14.js"
+      src="/_next/static/chunks/pages/withRouter-60b5066078530f25.js"
       defer=""
     ></script>
     <script src="/_next/static/BUILD_ID/_buildManifest.js" defer=""></script>
Commit: 83e49c9

@icyJoseph
Copy link
Contributor Author

I have to add that I am also not sure how we land on such a condition. I guess a there's a data race, or other means that can close the stream? Also not sure about the implications of not calling cancel, but I guess nothing happened because it crashed out anyway.

I'd also appreciate if someone could double check that this does indeed fix, at least, https://github.com/willianrod/next-readable-stream-error, even if eventually doesn't get merged.

@ijjk
Copy link
Member

ijjk commented Sep 20, 2023

Tests Passed

@Inzendis
Copy link

Inzendis commented Sep 21, 2023

Still happening after updating to Next.JS 13.5.2, unless I did something wrong my project is on "next": "13.5.2".

Internal error: TypeError: Invalid state: ReadableStream is already closed
at new NodeError (node:internal/errors:405:5)
at ReadableByteStreamController.enqueue (node:internal/webstreams/readablestream:1154:13)
at C:\xxxxxxx\xxxxxxx\Documents\xxxxxxx\xxxxxxx\node_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:1:461602
at ut (C:\xxxxxxx\xxxxxxx\Documents\xxxxxxx\xxxxxxxt\node_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:1:461652)
at ct (C:\xxxxx\xxxxx\Documents\xxxxxx\xxxxxxx\node_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:1:460930)
at Timeout._onTimeout (C:\xxxxxxx\xxxxxxx\Documents\xxxxxxx\xxxxxxx\node_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:1:458100)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7)

Only happens when I save the file Im working on the IDE. On browser refresh / spam of refresh it doesn't happen on the terminal.

Not using Suspense or anything fancy, just nested layouts. This wasn't happening on 13.4.9 for me but I was on an older Node.JS as well. I updated both and now I get it.

@jridgewell
Copy link
Contributor

jridgewell commented Sep 22, 2023

This was reverted in #55764. reader.closed is a Promise, not a boolean, so !reader.closed is always falsey. The end result is that we would never canceled the stream.

The bug is not actually in Next.js, it's in React's server streaming. We've pinged them, and they're looking into t.

@jridgewell
Copy link
Contributor

facebook/react#27405

@icyJoseph
Copy link
Contributor Author

icyJoseph commented Sep 22, 2023

Uff that was one huge mistake on my side. Apologies for that. I guess it makes sense that it was so hard to chase the root of the issue, working on the Next repo. How did you figure out that it was on React's side?

@EzequielBurg
Copy link

Still happening after updating to Next.JS 13.5.2, unless I did something wrong my project is on "next": "13.5.2".

Internal error: TypeError: Invalid state: ReadableStream is already closed at new NodeError (node:internal/errors:405:5) at ReadableByteStreamController.enqueue (node:internal/webstreams/readablestream:1154:13) at C:\xxxxxxx\xxxxxxx\Documents\xxxxxxx\xxxxxxx\node_modules\next\dist\compiled[next-serve](https://linear.app/vercel/issue/NEXT-serve)r\app-page.runtime.dev.js:1:461602 at ut (C:\xxxxxxx\xxxxxxx\Documents\xxxxxxx\xxxxxxxt\node_modules\next\dist\compiled[next-serve](https://linear.app/vercel/issue/NEXT-serve)r\app-page.runtime.dev.js:1:461652) at ct (C:\xxxxx\xxxxx\Documents\xxxxxx\xxxxxxx\node_modules\next\dist\compiled[next-serve](https://linear.app/vercel/issue/NEXT-serve)r\app-page.runtime.dev.js:1:460930) at Timeout._onTimeout (C:\xxxxxxx\xxxxxxx\Documents\xxxxxxx\xxxxxxx\node_modules\next\dist\compiled[next-serve](https://linear.app/vercel/issue/NEXT-serve)r\app-page.runtime.dev.js:1:458100) at listOnTimeout (node:internal/timers:569:17) at process.processTimers (node:internal/timers:512:7)

Only happens when I save the file Im working on the IDE. On browser refresh / spam of refresh it doesn't happen on the terminal.

Not using Suspense or anything fancy, just nested layouts. This wasn't happening on 13.4.9 for me but I was on an older Node.JS as well. I updated both and now I get it.

Same issue for me. And when I save a file in the IDE, the app reload on browser.

@icyJoseph
Copy link
Contributor Author

icyJoseph commented Sep 22, 2023

@EzequielBurg yeah as said here, these changes were not really a fix after all.

And the upstream React PR is still open.

@jridgewell
Copy link
Contributor

How did you figure out that it was on React's side?

The stack traces included on #55608 point to React's code. It can't have been on our side, cancelling a response stream is a normal operation that needs to be handled. So the source must of been whatever is pushing the data from:

    at ReadableByteStreamController.enqueue (node:internal/webstreams/readablestream:1150:13)
    at /path/to/app/readable-error/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:1:447268

@github-actions github-actions bot added the locked label Oct 7, 2023
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 7, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
CI approved Approve running CI for fork locked type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

TypeError [ERR_INVALID_STATE]: Invalid state: ReadableStream is already closed
6 participants