Skip to content

Fix: Keep metadata outlet consistent in prerender and resume #82540

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

Draft
wants to merge 11 commits into
base: canary
Choose a base branch
from

Conversation

gaojude
Copy link
Contributor

@gaojude gaojude commented Aug 11, 2025

No description provided.

@ijjk ijjk added created-by: Next.js team PRs by the Next.js team. type: next labels Aug 11, 2025
@gaojude gaojude changed the title Keep metadata outlet consistent in prerender and resume Fix: Keep metadata outlet consistent in prerender and resume Aug 11, 2025
@ijjk
Copy link
Member

ijjk commented Aug 11, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
buildDuration 19.7s 20.8s ⚠️ +1.1s
buildDurationCached 17.2s 14.9s N/A
nodeModulesSize 446 MB 446 MB N/A
nextStartRea..uration (ms) 447ms 438ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
234bef07-HASH.js gzip 54.2 kB 54.2 kB N/A
5194.HASH.js gzip 169 B 169 B
8863-HASH.js gzip 5.27 kB 5.27 kB N/A
9304-HASH.js gzip 45.9 kB 45.2 kB N/A
framework-HASH.js gzip 57.7 kB 57.7 kB N/A
main-app-HASH.js gzip 254 B 251 B N/A
main-HASH.js gzip 36.7 kB 36.5 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 169 B 169 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
amp-HASH.js gzip 502 B 507 B N/A
css-HASH.js gzip 335 B 333 B N/A
dynamic-HASH.js gzip 1.83 kB 1.83 kB N/A
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 350 B 352 B N/A
hooks-HASH.js gzip 385 B 383 B N/A
image-HASH.js gzip 4.65 kB 4.66 kB N/A
index-HASH.js gzip 257 B 259 B N/A
link-HASH.js gzip 2.52 kB 2.52 kB N/A
routerDirect..HASH.js gzip 320 B 318 B N/A
script-HASH.js gzip 387 B 386 B N/A
withRouter-HASH.js gzip 315 B 313 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 543 B 543 B
Client Build Manifests
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
_buildManifest.js gzip 753 B 751 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
index.html gzip 523 B 523 B
link.html gzip 537 B 538 B N/A
withRouter.html gzip 519 B 519 B
Overall change 1.04 kB 1.04 kB
Edge SSR bundle Size
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
edge-ssr.js gzip 120 kB 120 kB N/A
page.js gzip 224 kB 222 kB N/A
Overall change 0 B 0 B
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
middleware-b..fest.js gzip 673 B 675 B N/A
middleware-r..fest.js gzip 156 B 155 B N/A
middleware.js gzip 32.5 kB 32.6 kB ⚠️ +120 B
edge-runtime..pack.js gzip 853 B 853 B
Overall change 33.4 kB 33.5 kB ⚠️ +120 B
Next Runtimes
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
app-page-exp...dev.js gzip 284 kB 283 kB N/A
app-page-exp..prod.js gzip 156 kB 156 kB N/A
app-page-tur...dev.js gzip 284 kB 283 kB N/A
app-page-tur..prod.js gzip 156 kB 156 kB N/A
app-page-tur...dev.js gzip 272 kB 271 kB N/A
app-page-tur..prod.js gzip 150 kB 150 kB N/A
app-page.run...dev.js gzip 272 kB 271 kB N/A
app-page.run..prod.js gzip 150 kB 150 kB N/A
app-route-ex...dev.js gzip 69.6 kB 69.5 kB N/A
app-route-ex..prod.js gzip 48.8 kB 48.8 kB N/A
app-route-tu...dev.js gzip 69.6 kB 69.5 kB N/A
app-route-tu..prod.js gzip 48.8 kB 48.8 kB N/A
app-route-tu...dev.js gzip 69 kB 68.9 kB N/A
app-route-tu..prod.js gzip 48.4 kB 48.4 kB N/A
app-route.ru...dev.js gzip 68.9 kB 68.8 kB N/A
app-route.ru..prod.js gzip 48.4 kB 48.4 kB N/A
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 328 B 328 B
dist_client_...dev.js gzip 320 B 320 B
dist_client_...dev.js gzip 318 B 318 B
pages-api-tu...dev.js gzip 42.3 kB 42.3 kB
pages-api-tu..prod.js gzip 32.5 kB 32.5 kB
pages-api.ru...dev.js gzip 42.2 kB 42.2 kB
pages-api.ru..prod.js gzip 32.5 kB 32.5 kB
pages-turbo....dev.js gzip 52.3 kB 52.3 kB
pages-turbo...prod.js gzip 39.9 kB 39.9 kB
pages.runtim...dev.js gzip 52.4 kB 52.4 kB
pages.runtim..prod.js gzip 40 kB 40 kB
server.runti..prod.js gzip 59.8 kB 59.8 kB N/A
Overall change 335 kB 335 kB
build cache
vercel/next.js canary vercel/next.js jude/stabilize-tree Change
0.pack gzip 2.9 MB 2.86 MB N/A
index.pack gzip 93.1 kB 92.9 kB N/A
Overall change 0 B 0 B
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js
failed to diff
Diff for amp-HASH.js
@@ -1,17 +1,65 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5034],
   {
-    /***/ 4105: /***/ (
+    /***/ 6212: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ config: () => /* binding */ config,
+        /* harmony export */ default: () => /* binding */ Amp,
+        /* harmony export */
+      });
+      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(7023);
+      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_amp__WEBPACK_IMPORTED_MODULE_0__
+        );
+
+      const config = {
+        amp: "hybrid",
+      };
+      function Amp(props) {
+        return (0, next_amp__WEBPACK_IMPORTED_MODULE_0__.useAmp)()
+          ? "AMP mode"
+          : "normal mode";
+      }
+
+      /***/
+    },
+
+    /***/ 7023: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4642);
+      module.exports = __webpack_require__(9926);
+
+      /***/
+    },
+
+    /***/ 8647: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/amp",
+        function () {
+          return __webpack_require__(6212);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 4642: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9926: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -27,8 +75,8 @@
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(5977)
       );
-      const _ampcontextsharedruntime = __webpack_require__(8358);
-      const _ampmode = __webpack_require__(242);
+      const _ampcontextsharedruntime = __webpack_require__(5418);
+      const _ampmode = __webpack_require__(3494);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampmode.isInAmpMode)(
@@ -49,61 +97,13 @@
 
       /***/
     },
-
-    /***/ 5261: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/amp",
-        function () {
-          return __webpack_require__(9550);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 9550: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ config: () => /* binding */ config,
-        /* harmony export */ default: () => /* binding */ Amp,
-        /* harmony export */
-      });
-      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(4105);
-      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_amp__WEBPACK_IMPORTED_MODULE_0__
-        );
-
-      const config = {
-        amp: "hybrid",
-      };
-      function Amp(props) {
-        return (0, next_amp__WEBPACK_IMPORTED_MODULE_0__.useAmp)()
-          ? "AMP mode"
-          : "normal mode";
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(5261)
+      __webpack_exec__(8647)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for css-HASH.js
@@ -1,7 +1,14 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9813],
   {
-    /***/ 5267: /***/ (
+    /***/ 1978: /***/ (module) => {
+      // extracted by mini-css-extract-plugin
+      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
+
+      /***/
+    },
+
+    /***/ 6941: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -15,7 +22,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(6320);
+        __webpack_require__(1978);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -35,14 +42,7 @@
       /***/
     },
 
-    /***/ 6320: /***/ (module) => {
-      // extracted by mini-css-extract-plugin
-      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
-      /***/
-    },
-
-    /***/ 9643: /***/ (
+    /***/ 8685: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -50,7 +50,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function () {
-          return __webpack_require__(5267);
+          return __webpack_require__(6941);
         },
       ]);
       if (false) {
@@ -64,7 +64,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9643)
+      __webpack_exec__(8685)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,17 +1,63 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 2406: /***/ (
-      module,
-      __unused_webpack_exports,
+    /***/ 2839: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(8949);
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(7765);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(7444);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1376)
+            .then(__webpack_require__.bind(__webpack_require__, 1376))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1376],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4466: /***/ (
+    /***/ 4478: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -53,7 +99,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(5977)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(8452);
+      const _loadablecontextsharedruntime = __webpack_require__(5792);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -288,63 +334,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 4545: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(7765);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2406);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 5194)
-            .then(__webpack_require__.bind(__webpack_require__, 5194))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 5194],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
-
-      /***/
-    },
-
-    /***/ 8452: /***/ (
+    /***/ 5792: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -371,24 +361,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 8931: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(4545);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8949: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6153: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -421,7 +394,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         __webpack_require__(5977)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(4466)
+        __webpack_require__(4478)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -521,13 +494,40 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7444: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(6153);
+
+      /***/
+    },
+
+    /***/ 9805: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(2839);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8931)
+      __webpack_exec__(9805)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 4717: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(7776);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7776: /***/ (
+    /***/ 170: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -37,13 +20,30 @@
 
       /***/
     },
+
+    /***/ 8079: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(170);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4717)
+      __webpack_exec__(8079)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 943: /***/ (
+    /***/ 1177: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(2554);
+      module.exports = __webpack_require__(8366);
 
       /***/
     },
 
-    /***/ 3829: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4662);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4662: /***/ (
+    /***/ 1992: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(943);
+        __webpack_require__(1177);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 8751: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(1992);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3829)
+      __webpack_exec__(8751)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9804],
   {
-    /***/ 2452: /***/ (
+    /***/ 2227: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/hooks",
+        function () {
+          return __webpack_require__(2770);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 2770: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -59,30 +76,13 @@
 
       /***/
     },
-
-    /***/ 6105: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/hooks",
-        function () {
-          return __webpack_require__(2452);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6105)
+      __webpack_exec__(2227)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js

Diff too large to display

Diff for link-HASH.js
@@ -1,143 +1,82 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 1585: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2346: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(5977);
-      const _requestidlecallback = __webpack_require__(356);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection(param) {
-        let { rootRef, rootMargin, disabled } = param;
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef == null ? void 0 : rootRef.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
+      let errorOnce = (_) => {};
+      if (false) {
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 2621: /***/ (
+    /***/ 2783: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(5410);
+      module.exports = __webpack_require__(5926);
 
       /***/
     },
 
-    /***/ 5410: /***/ (module, exports, __webpack_require__) => {
+    /***/ 4174: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(7765);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(2783);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_link__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      function aLink(props) {
+        return /*#__PURE__*/ (0,
+        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
+          children: [
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
+              children: "A Link page!",
+            }),
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
+              {
+                href: "/",
+                children: "Go to /",
+              }
+            ),
+          ],
+        });
+      }
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+
+      /***/
+    },
+
+    /***/ 5926: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -164,17 +103,17 @@
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(5977)
       );
-      const _resolvehref = __webpack_require__(224);
-      const _islocalurl = __webpack_require__(7746);
-      const _formaturl = __webpack_require__(315);
-      const _utils = __webpack_require__(8709);
-      const _addlocale = __webpack_require__(6358);
-      const _routercontextsharedruntime = __webpack_require__(4095);
-      const _useintersection = __webpack_require__(1585);
-      const _getdomainlocale = __webpack_require__(8802);
-      const _addbasepath = __webpack_require__(6151);
-      const _usemergedref = __webpack_require__(9100);
-      const _erroronce = __webpack_require__(9574);
+      const _resolvehref = __webpack_require__(6708);
+      const _islocalurl = __webpack_require__(6526);
+      const _formaturl = __webpack_require__(5575);
+      const _utils = __webpack_require__(3497);
+      const _addlocale = __webpack_require__(722);
+      const _routercontextsharedruntime = __webpack_require__(1235);
+      const _useintersection = __webpack_require__(8069);
+      const _getdomainlocale = __webpack_require__(9734);
+      const _addbasepath = __webpack_require__(4419);
+      const _usemergedref = __webpack_require__(6136);
+      const _erroronce = __webpack_require__(2346);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -563,43 +502,7 @@
       /***/
     },
 
-    /***/ 8802: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "getDomainLocale", {
-        enumerable: true,
-        get: function () {
-          return getDomainLocale;
-        },
-      });
-      const _normalizetrailingslash = __webpack_require__(1652);
-      const basePath =
-        /* unused pure expression or super */ null && (false || "");
-      function getDomainLocale(path, locale, locales, domainLocales) {
-        if (false) {
-        } else {
-          return false;
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=get-domain-locale.js.map
-
-      /***/
-    },
-
-    /***/ 9100: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6136: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -677,26 +580,7 @@
       /***/
     },
 
-    /***/ 9574: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
-        },
-      });
-      let errorOnce = (_) => {};
-      if (false) {
-      } //# sourceMappingURL=error-once.js.map
-
-      /***/
-    },
-
-    /***/ 9693: /***/ (
+    /***/ 7047: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -704,7 +588,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/link",
         function () {
-          return __webpack_require__(9948);
+          return __webpack_require__(4174);
         },
       ]);
       if (false) {
@@ -713,48 +597,164 @@
       /***/
     },
 
-    /***/ 9948: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
+    /***/ 8069: /***/ (module, exports, __webpack_require__) => {
       "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
       });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(7765);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2621);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_link__WEBPACK_IMPORTED_MODULE_1__
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(5977);
+      const _requestidlecallback = __webpack_require__(3432);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
         );
-
-      function aLink(props) {
-        return /*#__PURE__*/ (0,
-        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
-          children: [
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
-              children: "A Link page!",
-            }),
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
-              {
-                href: "/",
-                children: "Go to /",
-              }
-            ),
-          ],
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection(param) {
+        let { rootRef, rootMargin, disabled } = param;
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef == null ? void 0 : rootRef.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
         });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 9734: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "getDomainLocale", {
+        enumerable: true,
+        get: function () {
+          return getDomainLocale;
+        },
+      });
+      const _normalizetrailingslash = __webpack_require__(504);
+      const basePath =
+        /* unused pure expression or super */ null && (false || "");
+      function getDomainLocale(path, locale, locales, domainLocales) {
+        if (false) {
+        } else {
+          return false;
+        }
       }
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=get-domain-locale.js.map
 
       /***/
     },
@@ -764,7 +764,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9693)
+      __webpack_exec__(7047)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,7 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 3699: /***/ (
+    /***/ 1008: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(2817);
+
+      /***/
+    },
+
+    /***/ 6951: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(8889);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 8889: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4802);
+        __webpack_require__(1008);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -48,40 +75,13 @@
 
       /***/
     },
-
-    /***/ 4802: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(8661);
-
-      /***/
-    },
-
-    /***/ 7861: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(3699);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(7861)
+      __webpack_exec__(6951)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 8863-HASH.js
@@ -1,8 +1,33 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [8863],
+  [7009],
   {
-    /***/ 22: /***/ (module, exports, __webpack_require__) => {
+    /***/ 414: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "AmpStateContext", {
+        enumerable: true,
+        get: function () {
+          return AmpStateContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(2726);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2224)
+      );
+      const AmpStateContext = _react.default.createContext({});
+      if (false) {
+      } //# sourceMappingURL=amp-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 1912: /***/ (module, exports, __webpack_require__) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
@@ -12,7 +37,7 @@
           return useMergedRef;
         },
       });
-      const _react = __webpack_require__(2786);
+      const _react = __webpack_require__(2224);
       function useMergedRef(refA, refB) {
         const cleanupA = (0, _react.useRef)(null);
         const cleanupB = (0, _react.useRef)(null);
@@ -78,56 +103,99 @@
       /***/
     },
 
-    /***/ 936: /***/ (__unused_webpack_module, exports) => {
+    /***/ 2843: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      0 && 0;
-      function _export(target, all) {
-        for (var name in all)
-          Object.defineProperty(target, name, {
-            enumerable: true,
-            get: all[name],
-          });
-      }
-      _export(exports, {
-        VALID_LOADERS: function () {
-          return VALID_LOADERS;
+      Object.defineProperty(exports, "RouterContext", {
+        enumerable: true,
+        get: function () {
+          return RouterContext;
         },
-        imageConfigDefault: function () {
-          return imageConfigDefault;
+      });
+      const _interop_require_default = __webpack_require__(2726);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2224)
+      );
+      const RouterContext = _react.default.createContext(null);
+      if (false) {
+      } //# sourceMappingURL=router-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 3003: /***/ (__unused_webpack_module, exports) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return _default;
         },
       });
-      const VALID_LOADERS = [
-        "default",
-        "imgix",
-        "cloudinary",
-        "akamai",
-        "custom",
-      ];
-      const imageConfigDefault = {
-        deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-        imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
-        path: "/_next/image",
-        loader: "default",
-        loaderFile: "",
-        domains: [],
-        disableStaticImages: false,
-        minimumCacheTTL: 60,
-        formats: ["image/webp"],
-        dangerouslyAllowSVG: false,
-        contentSecurityPolicy: "script-src 'none'; frame-src 'none'; sandbox;",
-        contentDispositionType: "attachment",
-        localPatterns: undefined,
-        remotePatterns: [],
-        qualities: undefined,
-        unoptimized: false,
-      }; //# sourceMappingURL=image-config.js.map
+      const DEFAULT_Q = 75;
+      function defaultLoader(param) {
+        let { config, src, width, quality } = param;
+        var _config_qualities;
+        if (false) {
+        }
+        const q =
+          quality ||
+          ((_config_qualities = config.qualities) == null
+            ? void 0
+            : _config_qualities.reduce((prev, cur) =>
+                Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q)
+                  ? cur
+                  : prev
+              )) ||
+          DEFAULT_Q;
+        return (
+          config.path +
+          "?url=" +
+          encodeURIComponent(src) +
+          "&w=" +
+          width +
+          "&q=" +
+          q +
+          (src.startsWith("/_next/static/media/") && false ? 0 : "")
+        );
+      }
+      // We use this to determine if the import is the default loader
+      // or a custom loader defined by the user in next.config.js
+      defaultLoader.__next_img_default = true;
+      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
 
       /***/
     },
 
-    /***/ 1268: /***/ (__unused_webpack_module, exports) => {
+    /***/ 3810: /***/ (__unused_webpack_module, exports) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "isInAmpMode", {
+        enumerable: true,
+        get: function () {
+          return isInAmpMode;
+        },
+      });
+      function isInAmpMode(param) {
+        let {
+          ampFirst = false,
+          hybrid = false,
+          hasQuery = false,
+        } = param === void 0 ? {} : param;
+        return ampFirst || (hybrid && hasQuery);
+      } //# sourceMappingURL=amp-mode.js.map
+
+      /***/
+    },
+
+    /***/ 5218: /***/ (__unused_webpack_module, exports) => {
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
        */
@@ -181,7 +249,7 @@
       /***/
     },
 
-    /***/ 1796: /***/ (module, exports, __webpack_require__) => {
+    /***/ 5402: /***/ (module, exports, __webpack_require__) => {
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
         value: true,
@@ -202,19 +270,19 @@
           return defaultHead;
         },
       });
-      const _interop_require_default = __webpack_require__(8182);
-      const _interop_require_wildcard = __webpack_require__(8319);
-      const _jsxruntime = __webpack_require__(1050);
+      const _interop_require_default = __webpack_require__(2726);
+      const _interop_require_wildcard = __webpack_require__(2527);
+      const _jsxruntime = __webpack_require__(8204);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(2786)
+        __webpack_require__(2224)
       );
       const _sideeffect = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5581)
+        __webpack_require__(9319)
       );
-      const _ampcontextsharedruntime = __webpack_require__(3800);
-      const _headmanagercontextsharedruntime = __webpack_require__(4950);
-      const _ampmode = __webpack_require__(7824);
-      const _warnonce = __webpack_require__(2854);
+      const _ampcontextsharedruntime = __webpack_require__(414);
+      const _headmanagercontextsharedruntime = __webpack_require__(3100);
+      const _ampmode = __webpack_require__(3810);
+      const _warnonce = __webpack_require__(4504);
       function defaultHead(inAmpMode) {
         if (inAmpMode === void 0) inAmpMode = false;
         const head = [
@@ -379,7 +447,7 @@
       /***/
     },
 
-    /***/ 2843: /***/ (
+    /***/ 6745: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -393,9 +461,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(2854);
-      const _imageblursvg = __webpack_require__(1268);
-      const _imageconfig = __webpack_require__(936);
+      const _warnonce = __webpack_require__(4504);
+      const _imageblursvg = __webpack_require__(5218);
+      const _imageconfig = __webpack_require__(9278);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -822,245 +890,7 @@
       /***/
     },
 
-    /***/ 3800: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "AmpStateContext", {
-        enumerable: true,
-        get: function () {
-          return AmpStateContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(8182);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2786)
-      );
-      const AmpStateContext = _react.default.createContext({});
-      if (false) {
-      } //# sourceMappingURL=amp-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 5581: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return SideEffect;
-        },
-      });
-      const _react = __webpack_require__(2786);
-      const isServer = "object" === "undefined";
-      const useClientOnlyLayoutEffect = isServer
-        ? () => {}
-        : _react.useLayoutEffect;
-      const useClientOnlyEffect = isServer ? () => {} : _react.useEffect;
-      function SideEffect(props) {
-        const { headManager, reduceComponentsToState } = props;
-        function emitChange() {
-          if (headManager && headManager.mountedInstances) {
-            const headElements = _react.Children.toArray(
-              Array.from(headManager.mountedInstances).filter(Boolean)
-            );
-            headManager.updateHead(
-              reduceComponentsToState(headElements, props)
-            );
-          }
-        }
-        if (isServer) {
-          var _headManager_mountedInstances;
-          headManager == null
-            ? void 0
-            : (_headManager_mountedInstances = headManager.mountedInstances) ==
-              null
-            ? void 0
-            : _headManager_mountedInstances.add(props.children);
-          emitChange();
-        }
-        useClientOnlyLayoutEffect(() => {
-          var _headManager_mountedInstances;
-          headManager == null
-            ? void 0
-            : (_headManager_mountedInstances = headManager.mountedInstances) ==
-              null
-            ? void 0
-            : _headManager_mountedInstances.add(props.children);
-          return () => {
-            var _headManager_mountedInstances;
-            headManager == null
-              ? void 0
-              : (_headManager_mountedInstances =
-                  headManager.mountedInstances) == null
-              ? void 0
-              : _headManager_mountedInstances.delete(props.children);
-          };
-        });
-        // We need to call `updateHead` method whenever the `SideEffect` is trigger in all
-        // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s
-        // being rendered, we only trigger the method from the last one.
-        // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`
-        // singleton in the layout effect pass, and actually trigger it in the effect pass.
-        useClientOnlyLayoutEffect(() => {
-          if (headManager) {
-            headManager._pendingUpdate = emitChange;
-          }
-          return () => {
-            if (headManager) {
-              headManager._pendingUpdate = emitChange;
-            }
-          };
-        });
-        useClientOnlyEffect(() => {
-          if (headManager && headManager._pendingUpdate) {
-            headManager._pendingUpdate();
-            headManager._pendingUpdate = null;
-          }
-          return () => {
-            if (headManager && headManager._pendingUpdate) {
-              headManager._pendingUpdate();
-              headManager._pendingUpdate = null;
-            }
-          };
-        });
-        return null;
-      } //# sourceMappingURL=side-effect.js.map
-
-      /***/
-    },
-
-    /***/ 7053: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "RouterContext", {
-        enumerable: true,
-        get: function () {
-          return RouterContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(8182);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2786)
-      );
-      const RouterContext = _react.default.createContext(null);
-      if (false) {
-      } //# sourceMappingURL=router-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 7281: /***/ (__unused_webpack_module, exports) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return _default;
-        },
-      });
-      const DEFAULT_Q = 75;
-      function defaultLoader(param) {
-        let { config, src, width, quality } = param;
-        var _config_qualities;
-        if (false) {
-        }
-        const q =
-          quality ||
-          ((_config_qualities = config.qualities) == null
-            ? void 0
-            : _config_qualities.reduce((prev, cur) =>
-                Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q)
-                  ? cur
-                  : prev
-              )) ||
-          DEFAULT_Q;
-        return (
-          config.path +
-          "?url=" +
-          encodeURIComponent(src) +
-          "&w=" +
-          width +
-          "&q=" +
-          q +
-          (src.startsWith("/_next/static/media/") && false ? 0 : "")
-        );
-      }
-      // We use this to determine if the import is the default loader
-      // or a custom loader defined by the user in next.config.js
-      defaultLoader.__next_img_default = true;
-      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
-
-      /***/
-    },
-
-    /***/ 7480: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "ImageConfigContext", {
-        enumerable: true,
-        get: function () {
-          return ImageConfigContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(8182);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2786)
-      );
-      const _imageconfig = __webpack_require__(936);
-      const ImageConfigContext = _react.default.createContext(
-        _imageconfig.imageConfigDefault
-      );
-      if (false) {
-      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 7824: /***/ (__unused_webpack_module, exports) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "isInAmpMode", {
-        enumerable: true,
-        get: function () {
-          return isInAmpMode;
-        },
-      });
-      function isInAmpMode(param) {
-        let {
-          ampFirst = false,
-          hybrid = false,
-          hasQuery = false,
-        } = param === void 0 ? {} : param;
-        return ampFirst || (hybrid && hasQuery);
-      } //# sourceMappingURL=amp-mode.js.map
-
-      /***/
-    },
-
-    /***/ 8863: /***/ (module, exports, __webpack_require__) => {
+    /***/ 7009: /***/ (module, exports, __webpack_require__) => {
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
         value: true,
@@ -1071,27 +901,27 @@
           return Image;
         },
       });
-      const _interop_require_default = __webpack_require__(8182);
-      const _interop_require_wildcard = __webpack_require__(8319);
-      const _jsxruntime = __webpack_require__(1050);
+      const _interop_require_default = __webpack_require__(2726);
+      const _interop_require_wildcard = __webpack_require__(2527);
+      const _jsxruntime = __webpack_require__(8204);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(2786)
+        __webpack_require__(2224)
       );
       const _reactdom = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(1407)
+        __webpack_require__(1345)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(1796)
+        __webpack_require__(5402)
       );
-      const _getimgprops = __webpack_require__(2843);
-      const _imageconfig = __webpack_require__(936);
-      const _imageconfigcontextsharedruntime = __webpack_require__(7480);
-      const _warnonce = __webpack_require__(2854);
-      const _routercontextsharedruntime = __webpack_require__(7053);
+      const _getimgprops = __webpack_require__(6745);
+      const _imageconfig = __webpack_require__(9278);
+      const _imageconfigcontextsharedruntime = __webpack_require__(9690);
+      const _warnonce = __webpack_require__(4504);
+      const _routercontextsharedruntime = __webpack_require__(2843);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(7281)
+        __webpack_require__(3003)
       );
-      const _usemergedref = __webpack_require__(22);
+      const _usemergedref = __webpack_require__(1912);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -1416,5 +1246,175 @@
 
       /***/
     },
+
+    /***/ 9278: /***/ (__unused_webpack_module, exports) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        VALID_LOADERS: function () {
+          return VALID_LOADERS;
+        },
+        imageConfigDefault: function () {
+          return imageConfigDefault;
+        },
+      });
+      const VALID_LOADERS = [
+        "default",
+        "imgix",
+        "cloudinary",
+        "akamai",
+        "custom",
+      ];
+      const imageConfigDefault = {
+        deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
+        imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
+        path: "/_next/image",
+        loader: "default",
+        loaderFile: "",
+        domains: [],
+        disableStaticImages: false,
+        minimumCacheTTL: 60,
+        formats: ["image/webp"],
+        dangerouslyAllowSVG: false,
+        contentSecurityPolicy: "script-src 'none'; frame-src 'none'; sandbox;",
+        contentDispositionType: "attachment",
+        localPatterns: undefined,
+        remotePatterns: [],
+        qualities: undefined,
+        unoptimized: false,
+      }; //# sourceMappingURL=image-config.js.map
+
+      /***/
+    },
+
+    /***/ 9319: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return SideEffect;
+        },
+      });
+      const _react = __webpack_require__(2224);
+      const isServer = "object" === "undefined";
+      const useClientOnlyLayoutEffect = isServer
+        ? () => {}
+        : _react.useLayoutEffect;
+      const useClientOnlyEffect = isServer ? () => {} : _react.useEffect;
+      function SideEffect(props) {
+        const { headManager, reduceComponentsToState } = props;
+        function emitChange() {
+          if (headManager && headManager.mountedInstances) {
+            const headElements = _react.Children.toArray(
+              Array.from(headManager.mountedInstances).filter(Boolean)
+            );
+            headManager.updateHead(
+              reduceComponentsToState(headElements, props)
+            );
+          }
+        }
+        if (isServer) {
+          var _headManager_mountedInstances;
+          headManager == null
+            ? void 0
+            : (_headManager_mountedInstances = headManager.mountedInstances) ==
+              null
+            ? void 0
+            : _headManager_mountedInstances.add(props.children);
+          emitChange();
+        }
+        useClientOnlyLayoutEffect(() => {
+          var _headManager_mountedInstances;
+          headManager == null
+            ? void 0
+            : (_headManager_mountedInstances = headManager.mountedInstances) ==
+              null
+            ? void 0
+            : _headManager_mountedInstances.add(props.children);
+          return () => {
+            var _headManager_mountedInstances;
+            headManager == null
+              ? void 0
+              : (_headManager_mountedInstances =
+                  headManager.mountedInstances) == null
+              ? void 0
+              : _headManager_mountedInstances.delete(props.children);
+          };
+        });
+        // We need to call `updateHead` method whenever the `SideEffect` is trigger in all
+        // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s
+        // being rendered, we only trigger the method from the last one.
+        // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`
+        // singleton in the layout effect pass, and actually trigger it in the effect pass.
+        useClientOnlyLayoutEffect(() => {
+          if (headManager) {
+            headManager._pendingUpdate = emitChange;
+          }
+          return () => {
+            if (headManager) {
+              headManager._pendingUpdate = emitChange;
+            }
+          };
+        });
+        useClientOnlyEffect(() => {
+          if (headManager && headManager._pendingUpdate) {
+            headManager._pendingUpdate();
+            headManager._pendingUpdate = null;
+          }
+          return () => {
+            if (headManager && headManager._pendingUpdate) {
+              headManager._pendingUpdate();
+              headManager._pendingUpdate = null;
+            }
+          };
+        });
+        return null;
+      } //# sourceMappingURL=side-effect.js.map
+
+      /***/
+    },
+
+    /***/ 9690: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "ImageConfigContext", {
+        enumerable: true,
+        get: function () {
+          return ImageConfigContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(2726);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2224)
+      );
+      const _imageconfig = __webpack_require__(9278);
+      const ImageConfigContext = _react.default.createContext(
+        _imageconfig.imageConfigDefault
+      );
+      if (false) {
+      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
+
+      /***/
+    },
   },
 ]);
Diff for 9304-HASH.js

Diff too large to display

Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,60 +1,57 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 3228: /***/ () => {
+    /***/ 3550: /***/ () => {
       /* (ignored) */
       /***/
     },
 
-    /***/ 5630: /***/ (
+    /***/ 6359: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2374, 23)
+        __webpack_require__.t.bind(__webpack_require__, 2816, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2673, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3319, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4710, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3564, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9138, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4932, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9207, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4549, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4379, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3877, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 631, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5521, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6231, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9520, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4706, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5947, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7121, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1720, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6594, 23)
+        __webpack_require__.bind(__webpack_require__, 977)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2231)
+        __webpack_require__.t.bind(__webpack_require__, 7569, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9683, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1504, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 174, 23)
-      );
-      Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3496, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4186, 23)
       );
 
       /***/
@@ -66,8 +63,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [5862, 9304],
-      () => (__webpack_exec__(7007), __webpack_exec__(5630))
+      [3008, 7874],
+      () => (__webpack_exec__(6401), __webpack_exec__(6359))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for app-page-exp..ntime.dev.js
failed to diff
Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js
failed to diff
Diff for app-page.runtime.prod.js

Diff too large to display

Diff for app-route-ex..ntime.dev.js

Diff too large to display

Diff for app-route-ex..time.prod.js

Diff too large to display

Diff for app-route-tu..ntime.dev.js

Diff too large to display

Diff for app-route-tu..time.prod.js

Diff too large to display

Diff for app-route-tu..ntime.dev.js

Diff too large to display

Diff for app-route-tu..time.prod.js

Diff too large to display

Diff for app-route.runtime.dev.js

Diff too large to display

Diff for app-route.ru..time.prod.js

Diff too large to display

Commit: e3a2efd

@@ -9,6 +9,9 @@
*/

"use strict";

console.log('file override react-dom-server.node.production.js')
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
console.log('file override react-dom-server.node.production.js')

A debug console.log statement has been added to the production React DOM server bundle that will output to the console in all Next.js applications using this version.

View Details

Analysis

The line console.log('file override react-dom-server.node.production.js') has been added to what appears to be a production build of React DOM server. This is problematic because:

  1. This is a production build (indicated by the filename containing "production.js") that should not contain debug logging
  2. This console output will appear in all Next.js applications that use this compiled version, polluting production console logs
  3. The message suggests this might be a temporary override or debugging change that wasn't intended to be committed
  4. Production builds should be clean and not output unnecessary information to the console

This debug statement will execute every time the React DOM server module is loaded, which happens during server-side rendering in Next.js applications.


Recommendation

Remove the console.log('file override react-dom-server.node.production.js') statement from line 13. If this was added for debugging purposes during development, ensure it's removed before the production build is created. If this file is generated from a source file, remove the console.log from the source and regenerate the compiled version.

@ijjk
Copy link
Member

ijjk commented Aug 11, 2025

Failing test suites

Commit: e3a2efd

pnpm test-dev test/e2e/app-dir/resume-streaming-metadata/resume-streaming-metadata.test.ts

  • resume-streaming-metadata > should work using cheerio
  • resume-streaming-metadata > should work using browser
Expand output

● resume-streaming-metadata › should work using cheerio

expect(received).toBe(expected) // Object.is equality

Expected: "hello world"
Received: "hello world 0.7305899836907641 "

   9 |   it('should work using cheerio', async () => {
  10 |     const $ = await next.render$('/')
> 11 |     expect($('p').text()).toBe('hello world')
     |                           ^
  12 |   })
  13 |
  14 |   // Recommended for tests that need a full browser

  at Object.toBe (e2e/app-dir/resume-streaming-metadata/resume-streaming-metadata.test.ts:11:27)

● resume-streaming-metadata › should work using browser

expect(received).toBe(expected) // Object.is equality

Expected: "hello world"
Received: "hello world 0.7795243285495219"

  15 |   it('should work using browser', async () => {
  16 |     const browser = await next.browser('/')
> 17 |     expect(await browser.elementByCss('p').text()).toBe('hello world')
     |                                                    ^
  18 |   })
  19 |
  20 |   // In case you need the full HTML. Can also use $.html() with cheerio.

  at Object.toBe (e2e/app-dir/resume-streaming-metadata/resume-streaming-metadata.test.ts:17:52)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/development/app-dir/hydration-error-count/hydration-error-count.test.ts (PPR)

  • hydration-error-count > should have correct hydration error count for bad nesting
  • hydration-error-count > should have correct hydration error count for html diff
  • hydration-error-count > should display correct hydration info in each hydration error view
  • hydration-error-count > should display runtime error separately from hydration errors
Expand output

● hydration-error-count › should have correct hydration error count for bad nesting

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `hydration-error-count should have correct hydration error count for bad nesting 1`

- Snapshot  - 1
+ Received  + 0

@@ -14,11 +14,10 @@
                          <SegmentTrieNode>
                          <ClientPageRoot Component={function Page} searchParams={{}} params={{}}>
                            <Page params={Promise} searchParams={Promise}>
  >                           <p>
  >                             <p>
-                       ...
                      ...
            ...",
      "description": "In HTML, <p> cannot be a descendant of <p>.
  This will cause a hydration error.",
      "environmentLabel": null,

   9 |     const browser = await next.browser('/bad-nesting')
  10 |
> 11 |     await expect(browser).toDisplayCollapsedRedbox(`
     |                           ^
  12 |      [
  13 |        {
  14 |          "componentStack": "...

  at Object.toDisplayCollapsedRedbox (development/app-dir/hydration-error-count/hydration-error-count.test.ts:11:27)

● hydration-error-count › should have correct hydration error count for html diff

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `hydration-error-count should have correct hydration error count for html diff 1`

- Snapshot  - 1
+ Received  + 0

@@ -14,11 +14,10 @@
                          <ClientPageRoot Component={function Page} searchParams={{}} params={{}}>
                            <Page params={Promise} searchParams={Promise}>
                              <p>
  +                             client
  -                             server
-                       ...
                      ...
            ...",
    "description": "Hydration failed because the server rendered text didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:",
    "environmentLabel": null,
    "label": "Recoverable Error",

  62 |     const browser = await next.browser('/html-diff')
  63 |
> 64 |     await expect(browser).toDisplayCollapsedRedbox(`
     |                           ^
  65 |      {
  66 |        "componentStack": "...
  67 |          <RenderFromTemplateContext>

  at Object.toDisplayCollapsedRedbox (development/app-dir/hydration-error-count/hydration-error-count.test.ts:64:27)

● hydration-error-count › should display correct hydration info in each hydration error view

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `hydration-error-count should display correct hydration info in each hydration error view 1`

- Snapshot  - 2
+ Received  + 0

@@ -14,11 +14,10 @@
                          <SegmentTrieNode>
                          <ClientPageRoot Component={function Page} searchParams={{}} params={{}}>
                            <Page params={Promise} searchParams={Promise}>
  >                           <p className="client">
  >                             <p>
-                       ...
                      ...
            ...",
      "description": "In HTML, <p> cannot be a descendant of <p>.
  This will cause a hydration error.",
      "environmentLabel": null,
@@ -48,11 +47,10 @@
                            <Page params={Promise} searchParams={Promise}>
                              <p
  +                             className="client"
  -                             className="server"
                              >
-                       ...
                      ...
            ...",
      "description": "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:",
      "environmentLabel": null,
      "label": "Recoverable Error",

  101 |     const browser = await next.browser('/two-issues')
  102 |
> 103 |     await expect(browser).toDisplayCollapsedRedbox(`
      |                           ^
  104 |      [
  105 |        {
  106 |          "componentStack": "...

  at Object.toDisplayCollapsedRedbox (development/app-dir/hydration-error-count/hydration-error-count.test.ts:103:27)

● hydration-error-count › should display runtime error separately from hydration errors

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `hydration-error-count should display runtime error separately from hydration errors 1`

- Snapshot  - 1
+ Received  + 0

@@ -14,11 +14,10 @@
                          <SegmentTrieNode>
                          <ClientPageRoot Component={function Page} searchParams={{}} params={{}}>
                            <Page params={Promise} searchParams={Promise}>
  >                           <p>
  >                             <p>
-                       ...
                      ...
            ...",
      "description": "In HTML, <p> cannot be a descendant of <p>.
  This will cause a hydration error.",
      "environmentLabel": null,

  175 |     const browser = await next.browser('/hydration-with-runtime-errors')
  176 |
> 177 |     await expect(browser).toDisplayRedbox(`
      |                           ^
  178 |      [
  179 |        {
  180 |          "componentStack": "...

  at Object.toDisplayRedbox (development/app-dir/hydration-error-count/hydration-error-count.test.ts:177:27)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/app-dir/metadata-streaming/metadata-streaming-customized-rule.test.ts (PPR)

  • app-dir - metadata-streaming-customized-rule > should send the blocking response for html limited bots
Expand output

● app-dir - metadata-streaming-customized-rule › should send the blocking response for html limited bots

expect(received).toBe(expected) // Object.is equality

Expected: "index page"
Received: ""

  23 |       }
  24 |     )
> 25 |     expect(await $('head title').text()).toBe('index page')
     |                                          ^
  26 |     expect(await $('body title').length).toBe(0)
  27 |   })
  28 |

  at Object.toBe (e2e/app-dir/metadata-streaming/metadata-streaming-customized-rule.test.ts:25:42)

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

pnpm test-start-turbo test/e2e/app-dir/global-error/basic/index.test.ts (turbopack)

  • app dir - global-error > should catch metadata error in error boundary if presented
  • app dir - global-error > should catch metadata error in global-error if no error boundary is presented
Expand output

● app dir - global-error › should catch metadata error in error boundary if presented

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#error')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Object.elementByCss (e2e/app-dir/global-error/basic/index.test.ts:92:26)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at Object.text (e2e/app-dir/global-error/basic/index.test.ts:92:49)

● app dir - global-error › should catch metadata error in global-error if no error boundary is presented

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('h1')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Object.elementByCss (e2e/app-dir/global-error/basic/index.test.ts:116:26)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at Object.text (e2e/app-dir/global-error/basic/index.test.ts:116:45)

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

pnpm test-start test/e2e/app-dir/forbidden/default/forbidden-default.test.ts

  • app dir - forbidden with default forbidden boundary > should be able to navigate to page with calling forbidden in metadata
Expand output

● app dir - forbidden with default forbidden boundary › should be able to navigate to page with calling forbidden in metadata

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('.next-error-h1')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Object.waitForElementByCss (e2e/app-dir/forbidden/default/forbidden-default.test.ts:60:19)

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

pnpm test-start test/e2e/app-dir/parallel-route-not-found/parallel-route-not-found.test.ts

  • parallel-route-not-found > should handle notFound() in generateMetadata on a page that also renders a parallel route
  • parallel-route-not-found > should handle notFound() in a slot
Expand output

● parallel-route-not-found › should handle notFound() in generateMetadata on a page that also renders a parallel route

expect(received).toContain(expected) // indexOf

Expected substring: "Custom Not Found!"
Received string:    "Hello from Page
@foo slot
@bar slot"

  75 |     // The page's `generateMetadata` function threw a `notFound()` error,
  76 |     // so we should see the not found page.
> 77 |     expect(await browser.elementByCss('body').text()).toContain(
     |                                                       ^
  78 |       'Custom Not Found!'
  79 |     )
  80 |   })

  at Object.toContain (e2e/app-dir/parallel-route-not-found/parallel-route-not-found.test.ts:77:55)

● parallel-route-not-found › should handle notFound() in a slot

expect(received).toContain(expected) // indexOf

Expected substring: "Custom Not Found!"
Received string:    "Hello from Page
@foo slot
@bar slot"

  85 |     // The page's `generateMetadata` function threw a `notFound()` error,
  86 |     // so we should see the not found page.
> 87 |     expect(await browser.elementByCss('body').text()).toContain(
     |                                                       ^
  88 |       'Custom Not Found!'
  89 |     )
  90 |   })

  at Object.toContain (e2e/app-dir/parallel-route-not-found/parallel-route-not-found.test.ts:87:55)

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

pnpm test-dev test/e2e/app-dir/cache-components/cache-components.console.test.ts

  • cache-components > dims console calls during prospective rendering
Expand output

● cache-components › dims console calls during prospective rendering

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `cache-components dims console calls during prospective rendering 1`

- Snapshot  - 13
+ Received  + 88

@@ -22,18 +22,93 @@
      |                 ^
    6 |   console.assert(
    7 |     false,
    8 |     '/console: This is an assert message with a %s',
  Assertion failed: /console: This is an assert message with a template
- /console: template(one: one, two: two)
- /console: This is a console page
- /console: not a template { foo: 'just-some-object' }
- Error: /console: test
-     at ConsolePage (app/console/page.tsx:5:17)
-   3 |   console.log('/console: This is a console page')
-   4 |   console.warn('/console: not a template', { foo: 'just-some-object' })
- > 5 |   console.error(new Error('/console: test'))
-     |                 ^
-   6 |   console.assert(
-   7 |     false,
-   8 |     '/console: This is an assert message with a %s',
- Assertion failed: /console: This is an assert message with a template
+ matchingHead {
+   lazyData: null,
+   rsc: {
+     '$$typeof': Symbol(react.transitional.element),
+     type: Symbol(react.fragment),
+     key: 'c',
+     props: { children: [Array] },
+     _owner: null,
+     _store: {}
+   },
+   prefetchRsc: null,
+   head: {
+     '$$typeof': Symbol(react.transitional.element),
+     type: Symbol(react.fragment),
+     key: 'h',
+     props: { children: [Array] },
+     _owner: null,
+     _store: {}
+   },
+   prefetchHead: null,
+   parallelRoutes: Map(0) {},
+   loading: null,
+   navigatedAt: -1
+ } /console/__PAGE__
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       props: [Object],
+       _owner: null,
+       _store: {}
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       props: [Object],
+       _owner: null,
+       _store: {}
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/console/__PAGE__'
+ ]
+ /console: template(one: one, two: two)
+ /console: This is a console page
+ /console: not a template { foo: 'just-some-object' }
+ Error: /console: test
+     at ConsolePage (app/console/page.tsx:5:17)
+   3 |   console.log('/console: This is a console page')
+   4 |   console.warn('/console: not a template', { foo: 'just-some-object' })
+ > 5 |   console.error(new Error('/console: test'))
+     |                 ^
+   6 |   console.assert(
+   7 |     false,
+   8 |     '/console: This is an assert message with a %s',
+ Assertion failed: /console: This is an assert message with a template
+ matchingHead {
+   lazyData: null,
+   rsc: {
+     '$$typeof': Symbol(react.transitional.element),
+     type: Symbol(react.fragment),
+     key: 'c',
+     props: { children: [Array] },
+     _owner: null,
+     _store: {}
+   },
+   prefetchRsc: null,
+   head: {
+     '$$typeof': Symbol(react.transitional.element),
+     type: Symbol(react.fragment),
+     key: 'h',
+     props: { children: [Array] },
+     _owner: null,
+     _store: {}
+   },
+   prefetchHead: null,
+   parallelRoutes: Map(0) {},
+   loading: null,
+   navigatedAt: -1
+ } /console/__PAGE__

  29 |       )[1]
  30 |
> 31 |       expect(cliOutputFromPage).toMatchInlineSnapshot(`
     |                                 ^
  32 |        "/console: template(one: one, two: two)
  33 |        /console: This is a console page
  34 |        /console: not a template { foo: 'just-some-object' }

  at Object.toMatchInlineSnapshot (e2e/app-dir/cache-components/cache-components.console.test.ts:31:33)

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

pnpm test-start test/e2e/app-dir/metadata-streaming-static-generation/metadata-streaming-static-generation.test.ts

  • app-dir - metadata-streaming-static-generation > dynamic pages with html limited bots > should contain stream metadata in head for suspenseful dynamic page
  • app-dir - metadata-streaming-static-generation > dynamic pages with html limited bots > should contain async generated metadata in head for simple dynamic page
Expand output

● app-dir - metadata-streaming-static-generation › dynamic pages with html limited bots › should contain stream metadata in head for suspenseful dynamic page

expect(received).toBe(expected) // Object.is equality

Expected: "suspenseful page - dynamic"
Received: ""

  86 |           },
  87 |         })
> 88 |         expect($('head title').text()).toBe('suspenseful page - dynamic')
     |                                        ^
  89 |         // Ensure it's suspenseful content
  90 |         expect($('.suspenseful-layout').text()).toBe('')
  91 |

  at Object.toBe (e2e/app-dir/metadata-streaming-static-generation/metadata-streaming-static-generation.test.ts:88:40)

● app-dir - metadata-streaming-static-generation › dynamic pages with html limited bots › should contain async generated metadata in head for simple dynamic page

expect(received).toBe(expected) // Object.is equality

Expected: "slow page - dynamic"
Received: ""

  105 |           },
  106 |         })
> 107 |         expect($('head title').text()).toBe('slow page - dynamic')
      |                                        ^
  108 |       })
  109 |     })
  110 |   }

  at Object.toBe (e2e/app-dir/metadata-streaming-static-generation/metadata-streaming-static-generation.test.ts:107:40)

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

pnpm test-dev-turbo test/e2e/app-dir/dedupe-rsc-error-log/dedupe-rsc-error-log.test.ts (turbopack)

  • dedupe-rsc-error-log > should only log RSC error once for edge runtime
Expand output

● dedupe-rsc-error-log › should only log RSC error once for edge runtime

expect(received).toBe(expected) // Object.is equality

Expected: 2
Received: 7

   6 |   await retry(() => {
   7 |     const parts = next.cliOutput.split(search)
>  8 |     expect(parts.length).toBe(2)
     |                          ^
   9 |   })
  10 | }
  11 |

  at toBe (e2e/app-dir/dedupe-rsc-error-log/dedupe-rsc-error-log.test.ts:8:26)
  at fn (lib/next-test-utils.ts:811:20)
  at expectContainOnce (e2e/app-dir/dedupe-rsc-error-log/dedupe-rsc-error-log.test.ts:6:3)
  at Object.<anonymous> (e2e/app-dir/dedupe-rsc-error-log/dedupe-rsc-error-log.test.ts:26:5)

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

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-layout-sharing/prefetch-layout-sharing.test.ts

  • layout sharing in non-static prefetches > runtime prefetches should omit layouts that were already prefetched with a runtime prefetch
  • layout sharing in non-static prefetches > runtime prefetches should omit layouts that were already prefetched with a full prefetch
Expand output

● layout sharing in non-static prefetches › runtime prefetches should omit layouts that were already prefetched with a runtime prefetch

expect(received).toEqual(expected) // deep equality

Expected: "Shared layout"
Received: "shared layout prefetching - layout with cookies and dynamic data"

  90 |         }
  91 |       )
> 92 |       expect(await browser.elementByCss('h2').text()).toEqual('Shared layout')
     |                                                       ^
  93 |       expect(await browser.elementByCss('h1').text()).toEqual('Page two')
  94 |       expect(await browser.elementById('cookie-value-layout').text()).toEqual(
  95 |         'Cookie from layout: testValue'

  at toEqual (e2e/app-dir/segment-cache/prefetch-layout-sharing/prefetch-layout-sharing.test.ts:92:55)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-layout-sharing/prefetch-layout-sharing.test.ts:80:5)

● layout sharing in non-static prefetches › runtime prefetches should omit layouts that were already prefetched with a full prefetch

expect(received).toEqual(expected) // deep equality

Expected: "Shared layout"
Received: "shared layout prefetching - layout with cookies and dynamic data"

  312 |         },
  313 |       ])
> 314 |       expect(await browser.elementByCss('h2').text()).toEqual('Shared layout')
      |                                                       ^
  315 |       expect(await browser.elementByCss('h1').text()).toEqual('Page two')
  316 |       expect(await browser.elementById('cookie-value-layout').text()).toEqual(
  317 |         'Cookie from layout: testValue'

  at toEqual (e2e/app-dir/segment-cache/prefetch-layout-sharing/prefetch-layout-sharing.test.ts:314:55)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-layout-sharing/prefetch-layout-sharing.test.ts:298:5)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/app-dir/not-found-default/index.test.ts (PPR)

  • app dir - not found with default 404 page > should be able to navigate to page with calling not-found in metadata
Expand output

● app dir - not found with default 404 page › should be able to navigate to page with calling not-found in metadata

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('.next-error-h1')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Object.waitForElementByCss (e2e/app-dir/not-found-default/index.test.ts:80:19)

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

pnpm test-start-turbo test/e2e/app-dir/ppr-navigations/prefetch-navigation/prefetch-navigation.test.ts (turbopack)

  • prefetch-navigation > should render the prefetch without waiting for the RSC request
Expand output

● prefetch-navigation › should render the prefetch without waiting for the RSC request

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#dynamic-page-2')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Object.waitForElementByCss (e2e/app-dir/ppr-navigations/prefetch-navigation/prefetch-navigation.test.ts:64:19)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/app-dir/metadata-navigation/metadata-navigation.test.ts (PPR)

  • app dir - metadata navigation > navigation > should support notFound in generateMetadata
  • app dir - metadata navigation > navigation > should support redirect in generateMetadata
Expand output

● app dir - metadata navigation › navigation › should support notFound in generateMetadata

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 1

  Object {
-   "robots": "noindex",
+   "robots": undefined,
    "viewport": "width=device-width, initial-scale=1",
  }

  1672 |       }
  1673 |     }
> 1674 |     expect(res).toEqual(expected)
       |                 ^
  1675 |   }
  1676 | }
  1677 |

  at toEqual (lib/next-test-utils.ts:1674:17)
  at Object.matchHtml (e2e/app-dir/metadata-navigation/metadata-navigation.test.ts:55:7)

● app dir - metadata navigation › navigation › should support redirect in generateMetadata

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('p')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at elementByCss (e2e/app-dir/metadata-navigation/metadata-navigation.test.ts:84:30)
  at fn (lib/next-test-utils.ts:811:20)
  at Object.<anonymous> (e2e/app-dir/metadata-navigation/metadata-navigation.test.ts:83:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/metadata-navigation/metadata-navigation.test.ts:84:48)
  at fn (lib/next-test-utils.ts:811:20)
  at Object.<anonymous> (e2e/app-dir/metadata-navigation/metadata-navigation.test.ts:83:7)

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

pnpm test-start-turbo test/e2e/app-dir/unauthorized/default/unauthorized-default.test.ts (turbopack)

  • app dir - unauthorized with default unauthorized boundary > should be able to navigate to page with calling unauthorized in metadata
Expand output

● app dir - unauthorized with default unauthorized boundary › should be able to navigate to page with calling unauthorized in metadata

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('.next-error-h1')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Object.waitForElementByCss (e2e/app-dir/unauthorized/default/unauthorized-default.test.ts:60:19)

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

pnpm test-dev test/e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts

  • parallel-route-not-found > should behave correctly without any errors
  • parallel-route-not-found > should handle the not found case correctly without any errors
Expand output

● parallel-route-not-found › should behave correctly without any errors

TIMED OUT: success

has-errors

undefined

  736 |
  737 |   if (hardError) {
> 738 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  739 |   }
  740 |   return false
  741 | }

  at check (lib/next-test-utils.ts:738:11)
  at Object.<anonymous> (e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts:14:7)

● parallel-route-not-found › should handle the not found case correctly without any errors

TIMED OUT: success

has-errors

undefined

  736 |
  737 |   if (hardError) {
> 738 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  739 |   }
  740 |   return false
  741 | }

  at check (lib/next-test-utils.ts:738:11)
  at Object.<anonymous> (e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts:60:7)

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

pnpm test-start-turbo test/e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts (turbopack)

  • segment cache (incremental opt in) > prefetches a dynamic route when PPR is disabled if it has a loading.tsx boundary
  • segment cache (incremental opt in) > skips prefetching a dynamic route when PPR is disabled if everything up to its loading.tsx boundary is already cached
  • segment cache (incremental opt in) > prefetches a shared layout on a PPR-enabled route that was previously omitted from a non-PPR-enabled route
Expand output

● segment cache (incremental opt in) › prefetches a dynamic route when PPR is disabled if it has a loading.tsx boundary

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading-boundary')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts:143:47)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts:136:5)

● segment cache (incremental opt in) › skips prefetching a dynamic route when PPR is disabled if everything up to its loading.tsx boundary is already cached

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading-boundary')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts:198:47)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts:192:7)

● segment cache (incremental opt in) › prefetches a shared layout on a PPR-enabled route that was previously omitted from a non-PPR-enabled route

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#page-loading-boundary')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts:282:23)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts:276:7)

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

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts

  • (runtime prefetch) > cache stale time handling > omits short-lived public caches with a short enough staleTime
  • (runtime prefetch) > cache stale time handling > omits private caches with a short enough staleTime
  • (runtime prefetch) > errors > aborts the prerender and logs an error when sync IO is used after awaiting cookies()
  • (runtime prefetch) > errors > aborts the prerender and logs an error when sync IO is used after awaiting searchParams
  • (runtime prefetch) > errors > aborts the prerender and logs an error when sync IO is used after awaiting a private cache
  • (runtime prefetch) > errors > aborts the prerender and logs an error when sync IO is used after awaiting a quickly-expiring public cache
  • (runtime prefetch) > in a page > includes dynamic params, but not dynamic content
  • (runtime prefetch) > in a page > includes root params, but not dynamic content
  • (runtime prefetch) > in a page > includes search params, but not dynamic content
  • (runtime prefetch) > in a page > includes cookies, but not dynamic content
  • (runtime prefetch) > in a private cache > includes dynamic params, but not dynamic content
  • (runtime prefetch) > in a private cache > includes root params, but not dynamic content
  • (runtime prefetch) > in a private cache > includes search params, but not dynamic content
  • (runtime prefetch) > in a private cache > includes cookies, but not dynamic content
  • (runtime prefetch) > passed to a public cache > includes dynamic params, but not dynamic content
  • (runtime prefetch) > passed to a public cache > includes root params, but not dynamic content
  • (runtime prefetch) > passed to a public cache > includes search params, but not dynamic content
  • (runtime prefetch) > passed to a public cache > includes cookies, but not dynamic content
  • (runtime prefetch) > should not cache runtime prefetch responses in the browser cache or server-side > private caches should return new results on each request
Expand output

● (runtime prefetch) › in a page › includes dynamic params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:105:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:91:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:105:57)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:91:7)

● (runtime prefetch) › in a page › includes root params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#root-param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:220:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:204:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:220:62)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:204:7)

● (runtime prefetch) › in a page › includes search params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#search-param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:337:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:321:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:337:64)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:321:7)

● (runtime prefetch) › in a page › includes cookies, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#cookie-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:424:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:412:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:424:58)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:412:7)

● (runtime prefetch) › in a private cache › includes dynamic params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:105:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:91:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:105:57)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:91:7)

● (runtime prefetch) › in a private cache › includes root params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#root-param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:220:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:204:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:220:62)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:204:7)

● (runtime prefetch) › in a private cache › includes search params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#search-param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:337:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:321:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:337:64)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:321:7)

● (runtime prefetch) › in a private cache › includes cookies, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#cookie-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:424:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:412:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:424:58)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:412:7)

● (runtime prefetch) › passed to a public cache › includes dynamic params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:105:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:91:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:105:57)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:91:7)

● (runtime prefetch) › passed to a public cache › includes root params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#root-param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:220:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:204:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:220:62)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:204:7)

● (runtime prefetch) › passed to a public cache › includes search params, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#search-param-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:337:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:321:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:337:64)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:321:7)

● (runtime prefetch) › passed to a public cache › includes cookies, but not dynamic content

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#cookie-value')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:424:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:412:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:424:58)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:412:7)

● (runtime prefetch) › should not cache runtime prefetch responses in the browser cache or server-side › private caches should return new results on each request

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#timestamp')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:623:45)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:612:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:623:70)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:612:7)

● (runtime prefetch) › cache stale time handling › omits short-lived public caches with a short enough staleTime

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#intro')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:848:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:834:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:848:51)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:834:7)

● (runtime prefetch) › cache stale time handling › omits private caches with a short enough staleTime

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#intro')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:927:30)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:913:7)
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:927:51)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at Object.<anonymous> (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:913:7)

● (runtime prefetch) › errors › aborts the prerender and logs an error when sync IO is used after awaiting cookies()

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#intro')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:32)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:53)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9

● (runtime prefetch) › errors › aborts the prerender and logs an error when sync IO is used after awaiting searchParams

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#intro')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:32)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:53)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9

● (runtime prefetch) › errors › aborts the prerender and logs an error when sync IO is used after awaiting a private cache

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#intro')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:32)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:53)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9

● (runtime prefetch) › errors › aborts the prerender and logs an error when sync IO is used after awaiting a quickly-expiring public cache

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#intro')

  458 |   waitForElementByCss(selector: string, timeout = 10_000) {
  459 |     return this.startChain(async () => {
> 460 |       const el = await page.waitForSelector(selector, {
      |                             ^
  461 |         timeout,
  462 |         state: 'attached',
  463 |       })

  at waitForSelector (lib/browsers/playwright.ts:460:29)
  at Playwright._chain (lib/browsers/playwright.ts:576:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:557:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:459:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:375:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:383:17)
  at elementById (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:32)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9
  at Proxy._chain (lib/browsers/playwright.ts:576:23)
  at Proxy._chain (lib/browsers/playwright.ts:552:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:391:17)
  at text (e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1070:53)
  at act (e2e/app-dir/segment-cache/router-act.ts:232:27)
  at e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts:1056:9

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

pnpm test-start test/production/app-dir/build-output-prerender/build-output-prerender.test.ts

  • build-output-prerender > with a next config file > with --debug-prerender > shows all prerender errors with readable stacks and code frames
  • build-output-prerender > with a next config file > without --debug-prerender > shows only a single prerender error with a mangled stack
Expand output

● build-output-prerender › with a next config file › without --debug-prerender › shows only a single prerender error with a mangled stack

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `build-output-prerender with a next config file without --debug-prerender shows only a single prerender error with a mangled stack 1`

- Snapshot  -   1
+ Received  + 105

@@ -1,6 +1,110 @@
- "Error: Route "/client" used `new Date()` inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time-client
+ "file override react-dom-server.node.production.js 111
+ file override react-dom-server.node.production.js 111
+ file override react-dom-server.node.production.js 111
+ file override react-dom-server.node.production.js 111
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '//_not-found/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/client/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '//_not-found/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/client/__PAGE__'
+ ]
+ Error: Route "/client" used `new Date()` inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time-client
      at x (<next-dist-dir>)
  To get a more detailed stack trace and pinpoint the issue, try one of the following:
    - Start the app in development mode by running `next dev`, then open "/client" in your browser to investigate the error.
    - Rerun the production build with `next build --debug-prerender` to generate better stack traces.
  Error occurred prerendering page "/client". Read more: https://nextjs.org/docs/messages/prerender-error

  101 |           `)
  102 |         } else {
> 103 |           expect(getPrerenderOutput(next.cliOutput)).toMatchInlineSnapshot(`
      |                                                      ^
  104 |            "Error: Route "/client" used \`new Date()\` inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time-client
  105 |                at x (<next-dist-dir>)
  106 |            To get a more detailed stack trace and pinpoint the issue, try one of the following:

  at Object.toMatchInlineSnapshot (production/app-dir/build-output-prerender/build-output-prerender.test.ts:103:54)

● build-output-prerender › with a next config file › with --debug-prerender › shows all prerender errors with readable stacks and code frames

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `build-output-prerender with a next config file with --debug-prerender shows all prerender errors with readable stacks and code frames 1`

- Snapshot  -  10
+ Received  + 164

@@ -1,15 +1,169 @@
- "Error: Route "/client" used `new Date()` inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time-client
-     at Page (bundler:///app/client/page.tsx:4:28)
-   2 |
-   3 | export default function Page() {
- > 4 |   return <p>Current time: {new Date().toISOString()}</p>
-     |                            ^
-   5 | }
-   6 |
- To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running `next dev`, then open "/client" in your browser to investigate the error.
- Error occurred prerendering page "/client". Read more: https://nextjs.org/docs/messages/prerender-error
+ "file override react-dom-server.node.production.js 111
+ file override react-dom-server.node.production.js 111
+ file override react-dom-server.node.production.js 111
+ file override react-dom-server.node.production.js 111
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '//_not-found/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/client/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '//_not-found/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/client/__PAGE__'
+ ]
+ Error: Route "/client" used `new Date()` inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time-client
+     at Page (bundler:///app/client/page.tsx:4:28)
+   2 |
+   3 | export default function Page() {
+ > 4 |   return <p>Current time: {new Date().toISOString()}</p>
+     |                            ^
+   5 | }
+   6 |
+ To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running `next dev`, then open "/client" in your browser to investigate the error.
+ Error occurred prerendering page "/client". Read more: https://nextjs.org/docs/messages/prerender-error
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/server/__PAGE__'
+ ]
+ matchingHead [
+   {
+     lazyData: null,
+     rsc: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'c',
+       ref: null,
+       props: [Object]
+     },
+     prefetchRsc: null,
+     head: {
+       '$$typeof': Symbol(react.transitional.element),
+       type: Symbol(react.fragment),
+       key: 'h',
+       ref: null,
+       props: [Object]
+     },
+     prefetchHead: null,
+     parallelRoutes: Map(0) {},
+     loading: null,
+     navigatedAt: -1
+   },
+   '/server/__PAGE__'
+ ]
  Error: Route "/server" used `Math.random()` outside of `"use cache"` and without explicitly calling `await connection()` beforehand. See more info here: https://nextjs.org/docs/messages/next-prerender-random

  at Page (../bundler:/app/server/page.tsx:13:27)
      11 |   await cachedDelay()
      12 |
    > 13 |   return <p>Random: {Math.random()}</p>
  at Object.toMatchInlineSnapshot (production/app-dir/build-output-prerender/build-output-prerender.test.ts:214:52)

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

pnpm test-dev test/e2e/app-dir/app/index.test.ts

  • app dir - basic > rewrites > should support rewrites on client-side navigation from pages to app with existing pages path
Expand output

● app dir - basic › rewrites › should support rewrites on client-side navigation from pages to app with existing pages path

TIMED OUT: success

undefined

TimeoutError: page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#link-to-rewritten-path')

  736 |
  737 |   if (hardError) {
> 738 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  739 |   }
  740 |   return false
  741 | }

  at check (lib/next-test-utils.ts:738:11)
  at Object.<anonymous> (e2e/app-dir/app/index.test.ts:560:9)

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

@ijjk ijjk added create-next-app Related to our CLI tool for quickly starting a new Next.js application. Documentation Related to Next.js' official documentation. Font (next/font) Related to Next.js Font Optimization. tests Turbopack Related to Turbopack with Next.js. labels Aug 12, 2025
@gaojude gaojude force-pushed the jude/stabilize-tree branch from e3360c4 to d223dd8 Compare August 12, 2025 01:27
Comment on lines 423 to 426
console.log('StreamingMetadataOutlet', !!StreamingMetadataOutlet)

const metadataOutlet = (
<MetadataOutlet ready={getMetadataReady} StreamingComponent={null} />
Copy link
Contributor

@vercel vercel bot Aug 12, 2025

Choose a reason for hiding this comment

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

Suggested change
console.log('StreamingMetadataOutlet', !!StreamingMetadataOutlet)
const metadataOutlet = (
<MetadataOutlet ready={getMetadataReady} StreamingComponent={null} />
const metadataOutlet = (
<MetadataOutlet ready={getMetadataReady} StreamingComponent={StreamingMetadataOutlet} />

The metadata outlet logic was changed to always pass StreamingComponent={null} instead of conditionally using StreamingMetadataOutlet, which may break streaming metadata functionality.

View Details

Analysis

The original code conditionally rendered either <StreamingMetadataOutlet /> or <MetadataOutlet ready={getMetadataReady} /> based on whether StreamingMetadataOutlet was available. The new code always renders <MetadataOutlet ready={getMetadataReady} StreamingComponent={null} />, completely bypassing the StreamingMetadataOutlet component even when it should be used.

This breaks the streaming metadata feature because:

  1. When StreamingMetadataOutlet is available (indicating streaming metadata should be used), the code now ignores it
  2. The StreamingComponent={null} parameter makes the new conditional logic in MetadataOutlet always fall through to the non-streaming path
  3. This could cause metadata to be handled synchronously instead of being streamed, potentially blocking rendering

The comment "Use the same condition to render metadataOutlet as metadata" was also removed, suggesting this behavioral change may be unintentional.


Recommendation

Restore the conditional logic to properly use StreamingMetadataOutlet when available:

const metadataOutlet = StreamingMetadataOutlet ? (
  <MetadataOutlet ready={getMetadataReady} StreamingComponent={StreamingMetadataOutlet} />
) : (
  <MetadataOutlet ready={getMetadataReady} StreamingComponent={null} />
)

Or revert to the original approach:

const metadataOutlet = StreamingMetadataOutlet ? (
  <StreamingMetadataOutlet />
) : (
  <MetadataOutlet ready={getMetadataReady} />
)

Also remove the debug console.log before production deployment.

Copy link

codspeed-hq bot commented Aug 12, 2025

CodSpeed Performance Report

Merging #82540 will not alter performance

Comparing jude/stabilize-tree (e3360c4) with canary (cc5e9e6)

Summary

✅ 9 untouched benchmarks

<StreamingMetadataOutlet />
) : (
<MetadataOutlet ready={getMetadataReady} />
console.log('StreamingMetadataOutlet', !!StreamingMetadataOutlet)
Copy link
Contributor

@vercel vercel bot Aug 12, 2025

Choose a reason for hiding this comment

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

Debug console.log statement was left in production code, which will output to server logs in production environments.

View Details
📝 Patch Details
diff --git a/packages/next/src/server/app-render/create-component-tree.tsx b/packages/next/src/server/app-render/create-component-tree.tsx
index f5e281f451..59f6265fb2 100644
--- a/packages/next/src/server/app-render/create-component-tree.tsx
+++ b/packages/next/src/server/app-render/create-component-tree.tsx
@@ -419,9 +419,6 @@ async function createComponentTreeInternal(
     (process.env.NEXT_RUNTIME === 'edge'
       ? process.env.__NEXT_EDGE_PROJECT_DIR
       : ctx.renderOpts.dir) || ''
-
-  console.log('StreamingMetadataOutlet', !!StreamingMetadataOutlet)
-
   const metadataOutlet = (
     <MetadataOutlet ready={getMetadataReady} StreamingComponent={null} />
   )

Analysis

A debug console.log statement console.log('StreamingMetadataOutlet', !!StreamingMetadataOutlet) was added at line 423. This type of debugging output should not be present in production code as it will:

  1. Add unnecessary noise to production server logs
  2. Potentially leak internal implementation details
  3. Impact performance slightly due to console operations
  4. Indicate incomplete cleanup of debugging code

This appears to be temporary debugging code that was accidentally left in the production codebase.


Recommendation

Remove the console.log statement:

// Remove this line:
console.log('StreamingMetadataOutlet', !!StreamingMetadataOutlet)

let serveStreamingMetadata = !userAgent
? true
: shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots)
// TEST: Hardcode serveStreamingMetadata to true
Copy link
Contributor

Choose a reason for hiding this comment

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

The serveStreamingMetadata logic has been hardcoded to true, bypassing user agent detection and bot handling, which could cause incorrect behavior for different client types.

View Details
📝 Patch Details
diff --git a/packages/next/src/build/templates/app-page.ts b/packages/next/src/build/templates/app-page.ts
index 53548e2533..9d4a74b86f 100644
--- a/packages/next/src/build/templates/app-page.ts
+++ b/packages/next/src/build/templates/app-page.ts
@@ -268,17 +268,13 @@ export async function handler(
   // being true for a revalidate due to modifying the base-server this.renderOpts
   // when fixing this to correct logic it causes hydration issue since we set
   // serveStreamingMetadata to true during export
-  // TEST: Hardcode serveStreamingMetadata to true
-  let serveStreamingMetadata = true
-  // Original logic:
-  // let serveStreamingMetadata = !userAgent
-  //   ? true
-  //   : shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots)
+  let serveStreamingMetadata = !userAgent
+    ? true
+    : shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots)
 
   if (isHtmlBot && isRoutePPREnabled) {
     isSSG = false
-    // TEST: Don't set serveStreamingMetadata to false
-    // serveStreamingMetadata = false
+    serveStreamingMetadata = false
   }
 
   // In development, we always want to generate dynamic HTML.

Analysis

The code has hardcoded serveStreamingMetadata = true and commented out the original logic that determined this value based on user agent detection and bot handling:

// Original logic (commented out):
// let serveStreamingMetadata = !userAgent
//   ? true
//   : shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots)

This bypasses important logic that:

  1. Detects bots and serves them appropriate content
  2. Respects the htmlLimitedBots configuration
  3. Handles cases where user agents should receive different streaming behavior

Additionally, the bot-specific logic serveStreamingMetadata = false for HTML bots with PPR is also commented out, which could cause bots to receive streaming content when they should receive static content.


Recommendation

Restore the original user agent detection logic and bot handling. If there are specific issues with the existing logic, they should be fixed properly rather than bypassed with hardcoded values. The changes should respect the existing API contracts and configuration options.

Comment on lines +828 to +833
{/* TEST: Commenting out metadata outlets to verify error source
<OutletBoundary>
<MetadataOutlet ready={getViewportReady} />
{metadataOutlet}
</OutletBoundary>
*/}
Copy link
Contributor

@vercel vercel bot Aug 12, 2025

Choose a reason for hiding this comment

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

Suggested change
{/* TEST: Commenting out metadata outlets to verify error source
<OutletBoundary>
<MetadataOutlet ready={getViewportReady} />
{metadataOutlet}
</OutletBoundary>
*/}

The metadata outlet error boundaries have been completely commented out, which means metadata-related errors will not be properly caught and handled during rendering.

View Details

Analysis

The code has commented out the entire OutletBoundary section that wraps metadata outlets:

{/* TEST: Commenting out metadata outlets to verify error source
<OutletBoundary>
  <MetadataOutlet ready={getViewportReady} />
  {metadataOutlet}
</OutletBoundary>
*/}

This removes critical error handling for metadata operations. The OutletBoundary component is responsible for catching and handling errors that occur during metadata resolution and rendering. Without this boundary:

  1. Metadata errors will bubble up and potentially crash the entire page render
  2. Users will see unhandled errors instead of graceful fallbacks
  3. The application loses its ability to recover from metadata-related failures
  4. Debugging becomes more difficult as errors lose their proper context

Recommendation

Restore the OutletBoundary wrapper around the metadata outlets. If there are specific issues with metadata rendering causing the "resumable slots" error, those should be fixed within the metadata system rather than by removing error boundaries entirely. The error boundaries are essential for application stability and should not be commented out.

Comment on lines +484 to +489
console.log('matchingHead', matchingHead)
const [headCacheNode, headKey] = matchingHead ?? [null, null]

let content = (
<RedirectBoundary>
{head}
<Head headCacheNode={headCacheNode} />
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
console.log('matchingHead', matchingHead)
const [headCacheNode, headKey] = matchingHead ?? [null, null]
let content = (
<RedirectBoundary>
{head}
<Head headCacheNode={headCacheNode} />
<Head key={headKey} headCacheNode={headCacheNode} />

Head component is now always rendered without the key prop that was used for proper remounting.

View Details

Analysis

The refactoring changed the Head component rendering from conditional rendering with a key prop to always rendering without a key. In the original code (before changes), when matchingHead was not null, the Head component was rendered with key={headKey} which is crucial for React to properly remount the component when the head moves to different segments.

The new code on line 489 renders <Head headCacheNode={headCacheNode} /> without any key prop, and gets headCacheNode from destructuring matchingHead ?? [null, null]. This loses the headKey that was previously used as the key prop, which could prevent proper component remounting when navigation occurs between different segments with different head content.


Recommendation

Restore the key prop to the Head component to ensure proper remounting:

<Head key={headKey} headCacheNode={headCacheNode} />

The headKey is already available from the destructuring on line 485, so it can be used directly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
create-next-app Related to our CLI tool for quickly starting a new Next.js application. created-by: Next.js team PRs by the Next.js team. Documentation Related to Next.js' official documentation. Font (next/font) Related to Next.js Font Optimization. tests Turbopack Related to Turbopack with Next.js. type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants