Skip to content

Conversation

lukesandberg
Copy link
Contributor

@lukesandberg lukesandberg commented Oct 21, 2025

What

Change our server source map generation to generate source map relative file paths in production mode. In development we already generate absolute paths which is reasonable for development usecases, but in production we were using turbopack::/// schemed uris. This changes the file handling for files in the [project] filesystem to be relative.

Why

This enables node and other runtimes to automatically format file paths to be working directory relative when printing errors to the console which many teminal emulators

Example

Before:

image.png

after:

image.png

TIL

My initial approach for this was to set the sourceRoot option to avoid prepending the same string onto nearly every source uri. However, the spec on this sourcemap feature is garbage. Intuitively i thought it worked like <base href=...> where relative uris would 'resolve' against it, but no, it is just a string concatenation feature. sigh.

@ijjk ijjk added created-by: Turbopack team PRs by the Turbopack team. examples Issue was opened via the examples template. Turbopack Related to Turbopack with Next.js. labels Oct 21, 2025
Copy link
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@lukesandberg lukesandberg changed the title Initial implementation of relative file paths for server source maps. Node has build in logic to resolve relative file uris out of source maps as relative to the project CWD [turbopack] in server source maps format project paths relative file paths. Oct 21, 2025
@ijjk
Copy link
Member

ijjk commented Oct 21, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
buildDuration 29.9s 27.7s N/A
buildDurationCached 24.4s 21.8s N/A
nodeModulesSize 454 MB 454 MB
nextStartRea..uration (ms) 631ms 737ms ⚠️ +106ms
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
1916.HASH.js gzip 169 B 169 B
9056-HASH.js gzip 54.7 kB 54.6 kB N/A
9225-HASH.js gzip 5.32 kB 5.32 kB N/A
c57d0559-HASH.js gzip 62.1 kB 62.1 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB
main-app-HASH.js gzip 256 B 258 B N/A
main-HASH.js gzip 39.8 kB 39.8 kB N/A
webpack-HASH.js gzip 1.69 kB 1.69 kB N/A
Overall change 60 kB 60 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js relative_file_paths_in_node 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 relative_file_paths_in_node Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 334 B 334 B
dynamic-HASH.js gzip 1.8 kB 1.8 kB N/A
edge-ssr-HASH.js gzip 256 B 255 B N/A
head-HASH.js gzip 350 B 352 B N/A
hooks-HASH.js gzip 384 B 381 B N/A
image-HASH.js gzip 4.79 kB 4.79 kB N/A
index-HASH.js gzip 259 B 260 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 318 B 317 B N/A
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.52 kB 1.52 kB
Client Build Manifests
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
_buildManifest.js gzip 716 B 719 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
index.html gzip 523 B 523 B
link.html gzip 537 B 538 B N/A
withRouter.html gzip 519 B 520 B N/A
Overall change 523 B 523 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
edge-ssr.js gzip 128 kB 128 kB N/A
page.js gzip 260 kB 260 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
middleware-b..fest.js gzip 638 B 643 B N/A
middleware-r..fest.js gzip 156 B 157 B N/A
middleware.js gzip 32.9 kB 32.7 kB N/A
edge-runtime..pack.js gzip 846 B 846 B
Overall change 846 B 846 B
Next Runtimes
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
app-page-exp...dev.js gzip 295 kB 295 kB
app-page-exp..prod.js gzip 162 kB 162 kB
app-page-tur...dev.js gzip 295 kB 295 kB
app-page-tur..prod.js gzip 161 kB 161 kB
app-page-tur...dev.js gzip 291 kB 291 kB
app-page-tur..prod.js gzip 159 kB 159 kB
app-page.run...dev.js gzip 292 kB 292 kB
app-page.run..prod.js gzip 159 kB 159 kB
app-route-ex...dev.js gzip 70.8 kB 70.8 kB
app-route-ex..prod.js gzip 49.4 kB 49.4 kB
app-route-tu...dev.js gzip 70.8 kB 70.8 kB
app-route-tu..prod.js gzip 49.4 kB 49.4 kB
app-route-tu...dev.js gzip 70.4 kB 70.4 kB
app-route-tu..prod.js gzip 49.2 kB 49.2 kB
app-route.ru...dev.js gzip 70.4 kB 70.4 kB
app-route.ru..prod.js gzip 49.1 kB 49.1 kB
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 43.3 kB 43.3 kB
pages-api-tu..prod.js gzip 33.1 kB 33.1 kB
pages-api.ru...dev.js gzip 43.3 kB 43.3 kB
pages-api.ru..prod.js gzip 33.1 kB 33.1 kB
pages-turbo....dev.js gzip 52.8 kB 52.8 kB
pages-turbo...prod.js gzip 40.1 kB 40.1 kB
pages.runtim...dev.js gzip 52.8 kB 52.8 kB
pages.runtim..prod.js gzip 40 kB 40 kB
server.runti..prod.js gzip 78.9 kB 78.9 kB
Overall change 2.71 MB 2.71 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js relative_file_paths_in_node Change
0.pack gzip 3.25 MB 3.26 MB ⚠️ +7.36 kB
index.pack gzip 94.7 kB 94.5 kB N/A
Overall change 3.25 MB 3.26 MB ⚠️ +7.36 kB
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 css-HASH.js
@@ -1,7 +1,31 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9813],
   {
-    /***/ 3593: /***/ (
+    /***/ 5832: /***/ (module) => {
+      // extracted by mini-css-extract-plugin
+      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
+
+      /***/
+    },
+
+    /***/ 6471: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/css",
+        function () {
+          return __webpack_require__(7839);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7839: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -15,7 +39,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7634);
+        __webpack_require__(5832);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -34,37 +58,13 @@
 
       /***/
     },
-
-    /***/ 4569: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/css",
-        function () {
-          return __webpack_require__(3593);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7634: /***/ (module) => {
-      // extracted by mini-css-extract-plugin
-      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4569)
+      __webpack_exec__(6471)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1033: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(2283);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 2283: /***/ (
+    /***/ 133: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -33,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4939);
+        __webpack_require__(7514);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -42,12 +25,12 @@
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 1916)
-            .then(__webpack_require__.bind(__webpack_require__, 1916))
+            .e(/* import() */ 3862)
+            .then(__webpack_require__.bind(__webpack_require__, 3862))
             .then((mod) => mod.Hello),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 1916],
+            webpack: () => [/*require.resolve*/ 3862],
           },
         }
       );
@@ -74,17 +57,24 @@
       /***/
     },
 
-    /***/ 4939: /***/ (
-      module,
+    /***/ 431: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(5121);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(133);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 5121: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1709: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -117,7 +107,7 @@
         __webpack_require__(2223)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(7622)
+        __webpack_require__(2522)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -217,7 +207,7 @@
       /***/
     },
 
-    /***/ 5160: /***/ (
+    /***/ 2463: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -244,7 +234,7 @@
       /***/
     },
 
-    /***/ 7622: /***/ (
+    /***/ 2522: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +276,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(2223)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(5160);
+      const _loadablecontextsharedruntime = __webpack_require__(2463);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -518,13 +508,23 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7514: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(1709);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1033)
+      __webpack_exec__(431)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9804],
   {
-    /***/ 1679: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/hooks",
-        function () {
-          return __webpack_require__(9198);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 9198: /***/ (
+    /***/ 2592: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 3925: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/hooks",
+        function () {
+          return __webpack_require__(2592);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1679)
+      __webpack_exec__(3925)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js

Diff too large to display

Diff for index-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 3454: /***/ (
+    /***/ 8431: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(8972);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 8972: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -19,30 +36,13 @@
 
       /***/
     },
-
-    /***/ 9241: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(3454);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9241)
+      __webpack_exec__(8431)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,26 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 1970: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 2025: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(3072);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 3262: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3066: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -47,17 +45,17 @@
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(2223)
       );
-      const _resolvehref = __webpack_require__(7868);
-      const _islocalurl = __webpack_require__(9350);
-      const _formaturl = __webpack_require__(6319);
-      const _utils = __webpack_require__(9889);
-      const _addlocale = __webpack_require__(9466);
-      const _routercontextsharedruntime = __webpack_require__(5691);
-      const _useintersection = __webpack_require__(3981);
-      const _getdomainlocale = __webpack_require__(4206);
-      const _addbasepath = __webpack_require__(9339);
-      const _usemergedref = __webpack_require__(6848);
-      const _erroronce = __webpack_require__(1970);
+      const _resolvehref = __webpack_require__(2776);
+      const _islocalurl = __webpack_require__(5770);
+      const _formaturl = __webpack_require__(8531);
+      const _utils = __webpack_require__(3565);
+      const _addlocale = __webpack_require__(8878);
+      const _routercontextsharedruntime = __webpack_require__(5111);
+      const _useintersection = __webpack_require__(6873);
+      const _getdomainlocale = __webpack_require__(4554);
+      const _addbasepath = __webpack_require__(9567);
+      const _usemergedref = __webpack_require__(4308);
+      const _erroronce = __webpack_require__(8910);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -436,7 +434,167 @@
       /***/
     },
 
-    /***/ 3981: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3072: /***/ (
+      __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__(1503);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(6929);
+      /* 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;
+
+      /***/
+    },
+
+    /***/ 4308: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(2223);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      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-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 4554: /***/ (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__(7740);
+      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
+
+      /***/
+    },
+
+    /***/ 6873: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -449,7 +607,7 @@
         },
       });
       const _react = __webpack_require__(2223);
-      const _requestidlecallback = __webpack_require__(1472);
+      const _requestidlecallback = __webpack_require__(6892);
       const hasIntersectionObserver =
         typeof IntersectionObserver === "function";
       const observers = new Map();
@@ -561,189 +719,31 @@
       /***/
     },
 
-    /***/ 4206: /***/ (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__(6704);
-      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
-
-      /***/
-    },
-
-    /***/ 6691: /***/ (
+    /***/ 6929: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(3262);
+      module.exports = __webpack_require__(3066);
 
       /***/
     },
 
-    /***/ 6771: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(8178);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 6848: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8910: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useMergedRef", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useMergedRef;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(2223);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      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-merged-ref.js.map
-
-      /***/
-    },
-
-    /***/ 8178: /***/ (
-      __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__(1503);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(6691);
-      /* 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;
+      let errorOnce = (_) => {};
+      if (false) {
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
@@ -753,7 +753,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6771)
+      __webpack_exec__(2025)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 286: /***/ (
+    /***/ 417: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/routerDirect",
+        function () {
+          return __webpack_require__(504);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 504: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +33,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7798);
+        __webpack_require__(1840);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -36,29 +53,12 @@
       /***/
     },
 
-    /***/ 4283: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/routerDirect",
-        function () {
-          return __webpack_require__(286);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7798: /***/ (
+    /***/ 1840: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(9587);
+      module.exports = __webpack_require__(1903);
 
       /***/
     },
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4283)
+      __webpack_exec__(417)
     );
     /******/ 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],
   {
-    /***/ 661: /***/ (
+    /***/ 2398: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(2397);
+
+      /***/
+    },
+
+    /***/ 4305: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(8543);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 8543: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5964);
+        __webpack_require__(2398);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -48,40 +75,13 @@
 
       /***/
     },
-
-    /***/ 5964: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(297);
-
-      /***/
-    },
-
-    /***/ 8803: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(661);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8803)
+      __webpack_exec__(4305)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,24 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 3163: /***/ (
-      __unused_webpack_module,
+    /***/ 1840: /***/ (
+      module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(3295);
-        },
-      ]);
-      if (false) {
-      }
+      module.exports = __webpack_require__(1903);
 
       /***/
     },
 
-    /***/ 3295: /***/ (
+    /***/ 2037: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -33,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7798);
+        __webpack_require__(1840);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -52,12 +45,19 @@
       /***/
     },
 
-    /***/ 7798: /***/ (
-      module,
+    /***/ 4041: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(9587);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(2037);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
@@ -67,7 +67,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3163)
+      __webpack_exec__(4041)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 9056-HASH.js
failed to diff
Diff for 9225-HASH.js
@@ -1,32 +1,81 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [9225],
+  [8439],
   {
-    /***/ 2: /***/ (__unused_webpack_module, exports, __webpack_require__) => {
+    /***/ 405: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "ImageConfigContext", {
+      Object.defineProperty(exports, "default", {
         enumerable: true,
         get: function () {
-          return ImageConfigContext;
+          return SideEffect;
         },
       });
-      const _interop_require_default = __webpack_require__(9010);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8879)
-      );
-      const _imageconfig = __webpack_require__(1686);
-      const ImageConfigContext = _react.default.createContext(
-        _imageconfig.imageConfigDefault
-      );
-      if (false) {
-      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
+      const _react = __webpack_require__(1774);
+      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));
+          }
+        }
+        if (isServer) {
+          headManager?.mountedInstances?.add(props.children);
+          emitChange();
+        }
+        useClientOnlyLayoutEffect(() => {
+          headManager?.mountedInstances?.add(props.children);
+          return () => {
+            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
 
       /***/
     },
 
-    /***/ 1169: /***/ (
+    /***/ 1155: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -40,9 +89,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(4352);
-      const _imageblursvg = __webpack_require__(2314);
-      const _imageconfig = __webpack_require__(1686);
+      const _warnonce = __webpack_require__(5358);
+      const _imageblursvg = __webpack_require__(6924);
+      const _imageconfig = __webpack_require__(9712);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -473,245 +522,60 @@
       /***/
     },
 
-    /***/ 1666: /***/ (module, exports, __webpack_require__) => {
-      /* __next_internal_client_entry_do_not_use__  cjs */
+    /***/ 1417: /***/ (
+      __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, {
-        default: function () {
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
           return _default;
         },
-        defaultHead: function () {
-          return defaultHead;
-        },
       });
-      const _interop_require_default = __webpack_require__(9010);
-      const _interop_require_wildcard = __webpack_require__(2275);
-      const _jsxruntime = __webpack_require__(1024);
-      const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(8879)
-      );
-      const _sideeffect = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2543)
-      );
-      const _headmanagercontextsharedruntime = __webpack_require__(5428);
-      const _warnonce = __webpack_require__(4352);
-      function defaultHead() {
-        const head = [
-          /*#__PURE__*/ (0, _jsxruntime.jsx)(
-            "meta",
-            {
-              charSet: "utf-8",
-            },
-            "charset"
-          ),
-          /*#__PURE__*/ (0, _jsxruntime.jsx)(
-            "meta",
+      const _findclosestquality = __webpack_require__(1639);
+      function defaultLoader({ config, src, width, quality }) {
+        if (
+          src.startsWith("/") &&
+          src.includes("?") &&
+          config.localPatterns?.length === 1 &&
+          config.localPatterns[0].pathname === "**" &&
+          config.localPatterns[0].search === ""
+        ) {
+          throw Object.defineProperty(
+            new Error(
+              `Image with src "${src}" is using a query string which is not configured in images.localPatterns.` +
+                `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`
+            ),
+            "__NEXT_ERROR_CODE",
             {
-              name: "viewport",
-              content: "width=device-width",
-            },
-            "viewport"
-          ),
-        ];
-        return head;
-      }
-      function onlyReactElement(list, child) {
-        // React children can be "string" or "number" in this case we ignore them for backwards compat
-        if (typeof child === "string" || typeof child === "number") {
-          return list;
-        }
-        // Adds support for React.Fragment
-        if (child.type === _react.default.Fragment) {
-          return list.concat(
-            _react.default.Children.toArray(child.props.children).reduce(
-              (fragmentList, fragmentChild) => {
-                if (
-                  typeof fragmentChild === "string" ||
-                  typeof fragmentChild === "number"
-                ) {
-                  return fragmentList;
-                }
-                return fragmentList.concat(fragmentChild);
-              },
-              []
-            )
+              value: "E871",
+              enumerable: false,
+              configurable: true,
+            }
           );
         }
-        return list.concat(child);
-      }
-      const METATYPES = ["name", "httpEquiv", "charSet", "itemProp"];
-      /*
- returns a function for filtering head child elements
- which shouldn't be duplicated, like <title/>
- Also adds support for deduplicated `key` properties
-*/ function unique() {
-        const keys = new Set();
-        const tags = new Set();
-        const metaTypes = new Set();
-        const metaCategories = {};
-        return (h) => {
-          let isUnique = true;
-          let hasKey = false;
-          if (h.key && typeof h.key !== "number" && h.key.indexOf("$") > 0) {
-            hasKey = true;
-            const key = h.key.slice(h.key.indexOf("$") + 1);
-            if (keys.has(key)) {
-              isUnique = false;
-            } else {
-              keys.add(key);
-            }
-          }
-          // eslint-disable-next-line default-case
-          switch (h.type) {
-            case "title":
-            case "base":
-              if (tags.has(h.type)) {
-                isUnique = false;
-              } else {
-                tags.add(h.type);
-              }
-              break;
-            case "meta":
-              for (let i = 0, len = METATYPES.length; i < len; i++) {
-                const metatype = METATYPES[i];
-                if (!h.props.hasOwnProperty(metatype)) continue;
-                if (metatype === "charSet") {
-                  if (metaTypes.has(metatype)) {
-                    isUnique = false;
-                  } else {
-                    metaTypes.add(metatype);
-                  }
-                } else {
-                  const category = h.props[metatype];
-                  const categories = metaCategories[metatype] || new Set();
-                  if (
-                    (metatype !== "name" || !hasKey) &&
-                    categories.has(category)
-                  ) {
-                    isUnique = false;
-                  } else {
-                    categories.add(category);
-                    metaCategories[metatype] = categories;
-                  }
-                }
-              }
-              break;
-          }
-          return isUnique;
-        };
-      }
-      /**
-       *
-       * @param headChildrenElements List of children of <Head>
-       */ function reduceComponents(headChildrenElements) {
-        return headChildrenElements
-          .reduce(onlyReactElement, [])
-          .reverse()
-          .concat(defaultHead().reverse())
-          .filter(unique())
-          .reverse()
-          .map((c, i) => {
-            const key = c.key || i;
-            if (false) {
-            }
-            return /*#__PURE__*/ _react.default.cloneElement(c, {
-              key,
-            });
-          });
-      }
-      /**
-       * This component injects elements to `<head>` of your page.
-       * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.
-       */ function Head({ children }) {
-        const headManager = (0, _react.useContext)(
-          _headmanagercontextsharedruntime.HeadManagerContext
-        );
-        return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {
-          reduceComponentsToState: reduceComponents,
-          headManager: headManager,
-          children: children,
-        });
-      }
-      const _default = Head;
-      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=head.js.map
-
-      /***/
-    },
-
-    /***/ 1686: /***/ (__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],
-          });
+        if (false) {
+        }
+        const q = (0, _findclosestquality.findClosestQuality)(quality, config);
+        return `${config.path}?url=${encodeURIComponent(
+          src
+        )}&w=${width}&q=${q}${
+          src.startsWith("/_next/static/media/") && false ? 0 : ""
+        }`;
       }
-      _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: [32, 48, 64, 96, 128, 256, 384],
-        path: "/_next/image",
-        loader: "default",
-        loaderFile: "",
-        /**
-         * @deprecated Use `remotePatterns` instead to protect your application from malicious users.
-         */ domains: [],
-        disableStaticImages: false,
-        minimumCacheTTL: 14400,
-        formats: ["image/webp"],
-        maximumRedirects: 3,
-        dangerouslyAllowLocalIP: false,
-        dangerouslyAllowSVG: false,
-        contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,
-        contentDispositionType: "attachment",
-        localPatterns: undefined,
-        remotePatterns: [],
-        qualities: [75],
-        unoptimized: false,
-      }; //# sourceMappingURL=image-config.js.map
+      // 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
 
       /***/
     },
 
-    /***/ 2285: /***/ (__unused_webpack_module, exports) => {
+    /***/ 1639: /***/ (__unused_webpack_module, exports) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
@@ -735,7 +599,35 @@
       /***/
     },
 
-    /***/ 2314: /***/ (__unused_webpack_module, exports) => {
+    /***/ 2896: /***/ (
+      __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__(2570);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(1774)
+      );
+      const _imageconfig = __webpack_require__(9712);
+      const ImageConfigContext = _react.default.createContext(
+        _imageconfig.imageConfigDefault
+      );
+      if (false) {
+      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 6924: /***/ (__unused_webpack_module, exports) => {
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
        */
@@ -774,133 +666,7 @@
       /***/
     },
 
-    /***/ 2543: /***/ (
-      __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__(8879);
-      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));
-          }
-        }
-        if (isServer) {
-          headManager?.mountedInstances?.add(props.children);
-          emitChange();
-        }
-        useClientOnlyLayoutEffect(() => {
-          headManager?.mountedInstances?.add(props.children);
-          return () => {
-            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
-
-      /***/
-    },
-
-    /***/ 8035: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return _default;
-        },
-      });
-      const _findclosestquality = __webpack_require__(2285);
-      function defaultLoader({ config, src, width, quality }) {
-        if (
-          src.startsWith("/") &&
-          src.includes("?") &&
-          config.localPatterns?.length === 1 &&
-          config.localPatterns[0].pathname === "**" &&
-          config.localPatterns[0].search === ""
-        ) {
-          throw Object.defineProperty(
-            new Error(
-              `Image with src "${src}" is using a query string which is not configured in images.localPatterns.` +
-                `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`
-            ),
-            "__NEXT_ERROR_CODE",
-            {
-              value: "E871",
-              enumerable: false,
-              configurable: true,
-            }
-          );
-        }
-        if (false) {
-        }
-        const q = (0, _findclosestquality.findClosestQuality)(quality, config);
-        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
-
-      /***/
-    },
-
-    /***/ 8848: /***/ (module, exports, __webpack_require__) => {
+    /***/ 7614: /***/ (module, exports, __webpack_require__) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
@@ -910,7 +676,7 @@
           return useMergedRef;
         },
       });
-      const _react = __webpack_require__(8879);
+      const _react = __webpack_require__(1774);
       function useMergedRef(refA, refB) {
         const cleanupA = (0, _react.useRef)(null);
         const cleanupB = (0, _react.useRef)(null);
@@ -976,32 +742,7 @@
       /***/
     },
 
-    /***/ 9059: /***/ (
-      __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__(9010);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8879)
-      );
-      const RouterContext = _react.default.createContext(null);
-      if (false) {
-      } //# sourceMappingURL=router-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 9225: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8439: /***/ (module, exports, __webpack_require__) => {
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
         value: true,
@@ -1012,27 +753,27 @@
           return Image;
         },
       });
-      const _interop_require_default = __webpack_require__(9010);
-      const _interop_require_wildcard = __webpack_require__(2275);
-      const _jsxruntime = __webpack_require__(1024);
+      const _interop_require_default = __webpack_require__(2570);
+      const _interop_require_wildcard = __webpack_require__(5643);
+      const _jsxruntime = __webpack_require__(2014);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(8879)
+        __webpack_require__(1774)
       );
       const _reactdom = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(3869)
+        __webpack_require__(7499)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(1666)
+        __webpack_require__(9452)
       );
-      const _getimgprops = __webpack_require__(1169);
-      const _imageconfig = __webpack_require__(1686);
-      const _imageconfigcontextsharedruntime = __webpack_require__(2);
-      const _warnonce = __webpack_require__(4352);
-      const _routercontextsharedruntime = __webpack_require__(9059);
+      const _getimgprops = __webpack_require__(1155);
+      const _imageconfig = __webpack_require__(9712);
+      const _imageconfigcontextsharedruntime = __webpack_require__(2896);
+      const _warnonce = __webpack_require__(5358);
+      const _routercontextsharedruntime = __webpack_require__(9813);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8035)
+        __webpack_require__(1417)
       );
-      const _usemergedref = __webpack_require__(8848);
+      const _usemergedref = __webpack_require__(7614);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -1358,5 +1099,268 @@
 
       /***/
     },
+
+    /***/ 9452: /***/ (module, exports, __webpack_require__) => {
+      /* __next_internal_client_entry_do_not_use__  cjs */
+      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, {
+        default: function () {
+          return _default;
+        },
+        defaultHead: function () {
+          return defaultHead;
+        },
+      });
+      const _interop_require_default = __webpack_require__(2570);
+      const _interop_require_wildcard = __webpack_require__(5643);
+      const _jsxruntime = __webpack_require__(2014);
+      const _react = /*#__PURE__*/ _interop_require_wildcard._(
+        __webpack_require__(1774)
+      );
+      const _sideeffect = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(405)
+      );
+      const _headmanagercontextsharedruntime = __webpack_require__(5326);
+      const _warnonce = __webpack_require__(5358);
+      function defaultHead() {
+        const head = [
+          /*#__PURE__*/ (0, _jsxruntime.jsx)(
+            "meta",
+            {
+              charSet: "utf-8",
+            },
+            "charset"
+          ),
+          /*#__PURE__*/ (0, _jsxruntime.jsx)(
+            "meta",
+            {
+              name: "viewport",
+              content: "width=device-width",
+            },
+            "viewport"
+          ),
+        ];
+        return head;
+      }
+      function onlyReactElement(list, child) {
+        // React children can be "string" or "number" in this case we ignore them for backwards compat
+        if (typeof child === "string" || typeof child === "number") {
+          return list;
+        }
+        // Adds support for React.Fragment
+        if (child.type === _react.default.Fragment) {
+          return list.concat(
+            _react.default.Children.toArray(child.props.children).reduce(
+              (fragmentList, fragmentChild) => {
+                if (
+                  typeof fragmentChild === "string" ||
+                  typeof fragmentChild === "number"
+                ) {
+                  return fragmentList;
+                }
+                return fragmentList.concat(fragmentChild);
+              },
+              []
+            )
+          );
+        }
+        return list.concat(child);
+      }
+      const METATYPES = ["name", "httpEquiv", "charSet", "itemProp"];
+      /*
+ returns a function for filtering head child elements
+ which shouldn't be duplicated, like <title/>
+ Also adds support for deduplicated `key` properties
+*/ function unique() {
+        const keys = new Set();
+        const tags = new Set();
+        const metaTypes = new Set();
+        const metaCategories = {};
+        return (h) => {
+          let isUnique = true;
+          let hasKey = false;
+          if (h.key && typeof h.key !== "number" && h.key.indexOf("$") > 0) {
+            hasKey = true;
+            const key = h.key.slice(h.key.indexOf("$") + 1);
+            if (keys.has(key)) {
+              isUnique = false;
+            } else {
+              keys.add(key);
+            }
+          }
+          // eslint-disable-next-line default-case
+          switch (h.type) {
+            case "title":
+            case "base":
+              if (tags.has(h.type)) {
+                isUnique = false;
+              } else {
+                tags.add(h.type);
+              }
+              break;
+            case "meta":
+              for (let i = 0, len = METATYPES.length; i < len; i++) {
+                const metatype = METATYPES[i];
+                if (!h.props.hasOwnProperty(metatype)) continue;
+                if (metatype === "charSet") {
+                  if (metaTypes.has(metatype)) {
+                    isUnique = false;
+                  } else {
+                    metaTypes.add(metatype);
+                  }
+                } else {
+                  const category = h.props[metatype];
+                  const categories = metaCategories[metatype] || new Set();
+                  if (
+                    (metatype !== "name" || !hasKey) &&
+                    categories.has(category)
+                  ) {
+                    isUnique = false;
+                  } else {
+                    categories.add(category);
+                    metaCategories[metatype] = categories;
+                  }
+                }
+              }
+              break;
+          }
+          return isUnique;
+        };
+      }
+      /**
+       *
+       * @param headChildrenElements List of children of <Head>
+       */ function reduceComponents(headChildrenElements) {
+        return headChildrenElements
+          .reduce(onlyReactElement, [])
+          .reverse()
+          .concat(defaultHead().reverse())
+          .filter(unique())
+          .reverse()
+          .map((c, i) => {
+            const key = c.key || i;
+            if (false) {
+            }
+            return /*#__PURE__*/ _react.default.cloneElement(c, {
+              key,
+            });
+          });
+      }
+      /**
+       * This component injects elements to `<head>` of your page.
+       * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.
+       */ function Head({ children }) {
+        const headManager = (0, _react.useContext)(
+          _headmanagercontextsharedruntime.HeadManagerContext
+        );
+        return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {
+          reduceComponentsToState: reduceComponents,
+          headManager: headManager,
+          children: children,
+        });
+      }
+      const _default = Head;
+      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=head.js.map
+
+      /***/
+    },
+
+    /***/ 9712: /***/ (__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: [32, 48, 64, 96, 128, 256, 384],
+        path: "/_next/image",
+        loader: "default",
+        loaderFile: "",
+        /**
+         * @deprecated Use `remotePatterns` instead to protect your application from malicious users.
+         */ domains: [],
+        disableStaticImages: false,
+        minimumCacheTTL: 14400,
+        formats: ["image/webp"],
+        maximumRedirects: 3,
+        dangerouslyAllowLocalIP: false,
+        dangerouslyAllowSVG: false,
+        contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,
+        contentDispositionType: "attachment",
+        localPatterns: undefined,
+        remotePatterns: [],
+        qualities: [75],
+        unoptimized: false,
+      }; //# sourceMappingURL=image-config.js.map
+
+      /***/
+    },
+
+    /***/ 9813: /***/ (
+      __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__(2570);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(1774)
+      );
+      const RouterContext = _react.default.createContext(null);
+      if (false) {
+      } //# sourceMappingURL=router-context.shared-runtime.js.map
+
+      /***/
+    },
   },
 ]);
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 3565: /***/ (
+    /***/ 2788: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
+
+    /***/ 3537: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7455, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7641, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2436, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8833, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4220, 23)
+        __webpack_require__.t.bind(__webpack_require__, 202, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6179, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5505, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 477, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9743, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 45, 23)
+        __webpack_require__.t.bind(__webpack_require__, 2067, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4644, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1166, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8713, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3791, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1432, 23)
+        __webpack_require__.t.bind(__webpack_require__, 666, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 5011, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9993, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2560, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1706, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 5161)
+        __webpack_require__.bind(__webpack_require__, 6335)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7801, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3883, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9992, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7030, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2066, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3712, 23)
       );
 
       /***/
     },
-
-    /***/ 7854: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -66,8 +66,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [9137, 9056],
-      () => (__webpack_exec__(1225), __webpack_exec__(3565))
+      [2494, 6734],
+      () => (__webpack_exec__(9303), __webpack_exec__(3537))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Commit: bdd9dd2

@ijjk
Copy link
Member

ijjk commented Oct 21, 2025

Failing test suites

Commit: bdd9dd2 | About building and testing Next.js

pnpm test-start test/e2e/app-dir/server-source-maps/server-source-maps.test.ts

  • app-dir - server source maps > logged errors have a sourcemapped stack with a codeframe (DD)
  • app-dir - server source maps > stack frames are ignore-listed in rsc (DD)
  • app-dir - server source maps > sourcemaps errors during module evaluation (DD)
Expand output

● app-dir - server source maps › logged errors have a sourcemapped stack with a codeframe

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

Expected substring: "(../app/rsc-error-log/page.js:4:17)"
Received string:    "   ▲ Next.js 16.0.0-canary.19 (Turbopack, Cache Components)
   - Experiments (use with caution):
     · cpus: 1
     ✓ serverSourceMaps·
   Creating an optimized production build ...
 ✓ Compiled successfully in 2.5s
   Running TypeScript ...
   Collecting page data ...
   Generating static pages (0/12) ...
Error: bad-sourcemap

  at <mangled> (../app/bad-sourcemap/custom:/[badhost]/app/bad-sourcemap/page.js:6:17)
      at stringify (<anonymous>)·
  Error: module-evaluation
  at module evaluation (../app/module-evaluation/module.js:1:22)
  > 1 | export const error = new Error('module-evaluation')
      |                      ^
    2 |
  Error: rsc-error-log-cause
  at <mangled> (../app/rsc-error-log-cause/page.js:2:17)
      at stringify (<anonymous>)
    1 | function logError(cause) {
  > 2 |   const error = new Error('rsc-error-log-cause', { cause })
      |                 ^
    3 |   console.error(error)
    4 | }
    5 | {
    [cause]: Error: Boom
  at <mangled> (../app/rsc-error-log-cause/page.js:7:17)
        at stringify (<anonymous>)
       5 |
       6 | export default function Page() {
    >  7 |   const error = new Error('Boom')
         |                 ^
       8 |   logError(error)
       9 |   return null
      10 | }
  }
  Error: rsc-error-log-custom-name-Foo
  at <mangled> (../app/rsc-error-log-custom-name/page.js:7:17)
      at stringify (<anonymous>)
     5 |
     6 | export default function Page() {
  >  7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
       |                 ^
     8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
     9 |   return null
    10 | }
  Error [MyError]: rsc-error-log-custom-name-Bar
  at <mangled> (../app/rsc-error-log-custom-name/page.js:8:17)
      at stringify (<anonymous>)
     6 | export default function Page() {
     7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
  >  8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
       |                 ^
     9 |   return null
    10 | }
    11 |
  Error: rsc-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:5:3)
      at stringify (<anonymous>)
    3 |
    4 | export default function Page() {
  > 5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
      |   ^
    6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
    7 |
    8 |   return null
  Error: rsc-anonymous-stack-frame-sandwich: internal
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:6:3)
      at stringify (<anonymous>)
    4 | export default function Page() {
    5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
  > 6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
      |   ^
    7 |
    8 |   return null
    9 | }
  Error: rsc-error-log-ignore-listed
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:17:11)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:16:9)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:15:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:14:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/rsc-error-log-ignore-listed/page.js:13:3)
      at stringify (<anonymous>)
     6 |
     7 | function logError() {
  >  8 |   const error = new Error('rsc-error-log-ignore-listed')
       |                 ^
     9 |   console.error(error)
    10 | }
    11 |
  Error: bad-sourcemap
  at <mangled> (../app/bad-sourcemap/custom:/[badhost]/app/bad-sourcemap/page.js:6:17)
      at stringify (<anonymous>)·
  Error: module-evaluation
  at module evaluation (../app/module-evaluation/module.js:1:22)
  > 1 | export const error = new Error('module-evaluation')
      |                      ^
    2 |
  Error: rsc-error-log-cause
  at <mangled> (../app/rsc-error-log-cause/page.js:2:17)
      at stringify (<anonymous>)
    1 | function logError(cause) {
  > 2 |   const error = new Error('rsc-error-log-cause', { cause })
      |                 ^
    3 |   console.error(error)
    4 | }
    5 | {
    [cause]: Error: Boom
  at <mangled> (../app/rsc-error-log-cause/page.js:7:17)
        at stringify (<anonymous>)
       5 |
       6 | export default function Page() {
    >  7 |   const error = new Error('Boom')
         |                 ^
       8 |   logError(error)
       9 |   return null
      10 | }
  }
  Error: rsc-error-log-custom-name-Foo
  at <mangled> (../app/rsc-error-log-custom-name/page.js:7:17)
      at stringify (<anonymous>)
     5 |
     6 | export default function Page() {
  >  7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
       |                 ^
     8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
     9 |   return null
    10 | }
  Error [MyError]: rsc-error-log-custom-name-Bar
  at <mangled> (../app/rsc-error-log-custom-name/page.js:8:17)
      at stringify (<anonymous>)
     6 | export default function Page() {
     7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
  >  8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
       |                 ^
     9 |   return null
    10 | }
    11 |
  Error: rsc-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:5:3)
      at stringify (<anonymous>)
    3 |
    4 | export default function Page() {
  > 5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
      |   ^
    6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
    7 |
    8 |   return null
  Error: rsc-anonymous-stack-frame-sandwich: internal
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:6:3)
      at stringify (<anonymous>)
    4 | export default function Page() {
    5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
  > 6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
      |   ^
    7 |
    8 |   return null
    9 | }
  Error: rsc-error-log-ignore-listed
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:17:11)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:16:9)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:15:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:14:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/rsc-error-log-ignore-listed/page.js:13:3)
      at stringify (<anonymous>)
     6 |
     7 | function logError() {
  >  8 |   const error = new Error('rsc-error-log-ignore-listed')
       |                 ^
     9 |   console.error(error)
    10 | }
    11 |
     Generating static pages (3/12)··
     Generating static pages (6/12)··
  Error: rsc-error-log
  at <mangled> (../app/rsc-error-log/page.js:4:17)
      at stringify (<anonymous>)
    2 |
    3 | function logError() {
  > 4 |   const error = new Error('rsc-error-log')
      |                 ^
    5 |   console.error(error)
    6 | }
    7 |
  Error: ssr-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:6:3)
    4 |
    5 | export default function Page() {
  > 6 |   runHiddenSetOfSetsExternal('ssr-anonymous-stack-frame-sandwich: external')
      |   ^
    7 |   runHiddenSetOfSetsInternal('ssr-anonymous-stack-frame-sandwich: internal')
    8 |
    9 |   return null
  Error: ignore-listed frames
  at <unknown> (../internal-pkg/sourcemapped.ts:18:43)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:22)
      at Set.forEach (<anonymous>)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:9)
      at Set.forEach (<anonymous>)
  at <mangled> (../internal-pkg/sourcemapped.ts:9:13)
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:7:3)·
  Error: ssr-error-log-ignore-listed
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:9:17)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:18:11)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:17:9)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:16:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:15:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/ssr-error-log-ignore-listed/page.js:14:3)
     7 |
     8 | function logError() {
  >  9 |   const error = new Error('ssr-error-log-ignore-listed')
       |                 ^
    10 |   console.error(error)
    11 | }
    12 |
  Error: rsc-error-log
  at <mangled> (../app/rsc-error-log/page.js:4:17)
      at stringify (<anonymous>)
    2 |
    3 | function logError() {
  > 4 |   const error = new Error('rsc-error-log')
      |                 ^
    5 |   console.error(error)
    6 | }
    7 |
  Error: ssr-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:6:3)
    4 |
    5 | export default function Page() {
  > 6 |   runHiddenSetOfSetsExternal('ssr-anonymous-stack-frame-sandwich: external')
      |   ^
    7 |   runHiddenSetOfSetsInternal('ssr-anonymous-stack-frame-sandwich: internal')
    8 |
    9 |   return null
  Error: ignore-listed frames
  at <unknown> (../internal-pkg/sourcemapped.ts:18:43)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:22)
      at Set.forEach (<anonymous>)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:9)
      at Set.forEach (<anonymous>)
  at <mangled> (../internal-pkg/sourcemapped.ts:9:13)
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:7:3)·
  Error: ssr-error-log-ignore-listed
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:9:17)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:18:11)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:17:9)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:16:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:15:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/ssr-error-log-ignore-listed/page.js:14:3)
     7 |
     8 | function logError() {
  >  9 |   const error = new Error('ssr-error-log-ignore-listed')
       |                 ^
    10 |   console.error(error)
    11 | }
    12 |
     Generating static pages (9/12)··
   ✓ Generating static pages (12/12) in 5.2s
     Finalizing page optimization ...·
  Route (app)
  ┌ ○ /_not-found
  ├ ○ /bad-sourcemap
  ├ ○ /module-evaluation
  ├ ○ /rsc-anonymous-stack-frame-sandwich
  ├ ○ /rsc-error-log
  ├ ○ /rsc-error-log-cause
  ├ ○ /rsc-error-log-custom-name
  ├ ○ /rsc-error-log-ignore-listed
  ├ ○ /ssr-anonymous-stack-frame-sandwich
  ├ ○ /ssr-error-log-ignore-listed
  └ ◐ /ssr-throw··
  ○  (Static)             prerendered as static content
  ◐  (Partial Prerender)  prerendered as static HTML with dynamic server-streamed content·
     ▲ Next.js 16.0.0-canary.19
     - Local:        http://localhost:36951
     - Network:      http://135.181.236.24:36951·
   ✓ Starting...
   ✓ Ready in 230ms
  "
  at Object.toContain (e2e/app-dir/server-source-maps/server-source-maps.test.ts:59:52)

● app-dir - server source maps › stack frames are ignore-listed in rsc

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

Expected substring: "at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)"
Received string:    "   ▲ Next.js 16.0.0-canary.19 (Turbopack, Cache Components)
   - Experiments (use with caution):
     · cpus: 1
     ✓ serverSourceMaps·
   Creating an optimized production build ...
 ✓ Compiled successfully in 2.5s
   Running TypeScript ...
   Collecting page data ...
   Generating static pages (0/12) ...
Error: bad-sourcemap

  at <mangled> (../app/bad-sourcemap/custom:/[badhost]/app/bad-sourcemap/page.js:6:17)
      at stringify (<anonymous>)·
  Error: module-evaluation
  at module evaluation (../app/module-evaluation/module.js:1:22)
  > 1 | export const error = new Error('module-evaluation')
      |                      ^
    2 |
  Error: rsc-error-log-cause
  at <mangled> (../app/rsc-error-log-cause/page.js:2:17)
      at stringify (<anonymous>)
    1 | function logError(cause) {
  > 2 |   const error = new Error('rsc-error-log-cause', { cause })
      |                 ^
    3 |   console.error(error)
    4 | }
    5 | {
    [cause]: Error: Boom
  at <mangled> (../app/rsc-error-log-cause/page.js:7:17)
        at stringify (<anonymous>)
       5 |
       6 | export default function Page() {
    >  7 |   const error = new Error('Boom')
         |                 ^
       8 |   logError(error)
       9 |   return null
      10 | }
  }
  Error: rsc-error-log-custom-name-Foo
  at <mangled> (../app/rsc-error-log-custom-name/page.js:7:17)
      at stringify (<anonymous>)
     5 |
     6 | export default function Page() {
  >  7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
       |                 ^
     8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
     9 |   return null
    10 | }
  Error [MyError]: rsc-error-log-custom-name-Bar
  at <mangled> (../app/rsc-error-log-custom-name/page.js:8:17)
      at stringify (<anonymous>)
     6 | export default function Page() {
     7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
  >  8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
       |                 ^
     9 |   return null
    10 | }
    11 |
  Error: rsc-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:5:3)
      at stringify (<anonymous>)
    3 |
    4 | export default function Page() {
  > 5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
      |   ^
    6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
    7 |
    8 |   return null
  Error: rsc-anonymous-stack-frame-sandwich: internal
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:6:3)
      at stringify (<anonymous>)
    4 | export default function Page() {
    5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
  > 6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
      |   ^
    7 |
    8 |   return null
    9 | }
  Error: rsc-error-log-ignore-listed
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:17:11)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:16:9)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:15:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:14:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/rsc-error-log-ignore-listed/page.js:13:3)
      at stringify (<anonymous>)
     6 |
     7 | function logError() {
  >  8 |   const error = new Error('rsc-error-log-ignore-listed')
       |                 ^
     9 |   console.error(error)
    10 | }
    11 |
  Error: bad-sourcemap
  at <mangled> (../app/bad-sourcemap/custom:/[badhost]/app/bad-sourcemap/page.js:6:17)
      at stringify (<anonymous>)·
  Error: module-evaluation
  at module evaluation (../app/module-evaluation/module.js:1:22)
  > 1 | export const error = new Error('module-evaluation')
      |                      ^
    2 |
  Error: rsc-error-log-cause
  at <mangled> (../app/rsc-error-log-cause/page.js:2:17)
      at stringify (<anonymous>)
    1 | function logError(cause) {
  > 2 |   const error = new Error('rsc-error-log-cause', { cause })
      |                 ^
    3 |   console.error(error)
    4 | }
    5 | {
    [cause]: Error: Boom
  at <mangled> (../app/rsc-error-log-cause/page.js:7:17)
        at stringify (<anonymous>)
       5 |
       6 | export default function Page() {
    >  7 |   const error = new Error('Boom')
         |                 ^
       8 |   logError(error)
       9 |   return null
      10 | }
  }
  Error: rsc-error-log-custom-name-Foo
  at <mangled> (../app/rsc-error-log-custom-name/page.js:7:17)
      at stringify (<anonymous>)
     5 |
     6 | export default function Page() {
  >  7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
       |                 ^
     8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
     9 |   return null
    10 | }
  Error [MyError]: rsc-error-log-custom-name-Bar
  at <mangled> (../app/rsc-error-log-custom-name/page.js:8:17)
      at stringify (<anonymous>)
     6 | export default function Page() {
     7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
  >  8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
       |                 ^
     9 |   return null
    10 | }
    11 |
  Error: rsc-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:5:3)
      at stringify (<anonymous>)
    3 |
    4 | export default function Page() {
  > 5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
      |   ^
    6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
    7 |
    8 |   return null
  Error: rsc-anonymous-stack-frame-sandwich: internal
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:6:3)
      at stringify (<anonymous>)
    4 | export default function Page() {
    5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
  > 6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
      |   ^
    7 |
    8 |   return null
    9 | }
  Error: rsc-error-log-ignore-listed
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:17:11)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:16:9)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:15:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:14:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/rsc-error-log-ignore-listed/page.js:13:3)
      at stringify (<anonymous>)
     6 |
     7 | function logError() {
  >  8 |   const error = new Error('rsc-error-log-ignore-listed')
       |                 ^
     9 |   console.error(error)
    10 | }
    11 |
     Generating static pages (3/12)··
     Generating static pages (6/12)··
  Error: rsc-error-log
  at <mangled> (../app/rsc-error-log/page.js:4:17)
      at stringify (<anonymous>)
    2 |
    3 | function logError() {
  > 4 |   const error = new Error('rsc-error-log')
      |                 ^
    5 |   console.error(error)
    6 | }
    7 |
  Error: ssr-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:6:3)
    4 |
    5 | export default function Page() {
  > 6 |   runHiddenSetOfSetsExternal('ssr-anonymous-stack-frame-sandwich: external')
      |   ^
    7 |   runHiddenSetOfSetsInternal('ssr-anonymous-stack-frame-sandwich: internal')
    8 |
    9 |   return null
  Error: ignore-listed frames
  at <unknown> (../internal-pkg/sourcemapped.ts:18:43)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:22)
      at Set.forEach (<anonymous>)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:9)
      at Set.forEach (<anonymous>)
  at <mangled> (../internal-pkg/sourcemapped.ts:9:13)
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:7:3)·
  Error: ssr-error-log-ignore-listed
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:9:17)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:18:11)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:17:9)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:16:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:15:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/ssr-error-log-ignore-listed/page.js:14:3)
     7 |
     8 | function logError() {
  >  9 |   const error = new Error('ssr-error-log-ignore-listed')
       |                 ^
    10 |   console.error(error)
    11 | }
    12 |
  Error: rsc-error-log
  at <mangled> (../app/rsc-error-log/page.js:4:17)
      at stringify (<anonymous>)
    2 |
    3 | function logError() {
  > 4 |   const error = new Error('rsc-error-log')
      |                 ^
    5 |   console.error(error)
    6 | }
    7 |
  Error: ssr-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:6:3)
    4 |
    5 | export default function Page() {
  > 6 |   runHiddenSetOfSetsExternal('ssr-anonymous-stack-frame-sandwich: external')
      |   ^
    7 |   runHiddenSetOfSetsInternal('ssr-anonymous-stack-frame-sandwich: internal')
    8 |
    9 |   return null
  Error: ignore-listed frames
  at <unknown> (../internal-pkg/sourcemapped.ts:18:43)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:22)
      at Set.forEach (<anonymous>)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:9)
      at Set.forEach (<anonymous>)
  at <mangled> (../internal-pkg/sourcemapped.ts:9:13)
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:7:3)·
  Error: ssr-error-log-ignore-listed
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:9:17)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:18:11)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:17:9)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:16:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:15:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/ssr-error-log-ignore-listed/page.js:14:3)
     7 |
     8 | function logError() {
  >  9 |   const error = new Error('ssr-error-log-ignore-listed')
       |                 ^
    10 |   console.error(error)
    11 | }
    12 |
     Generating static pages (9/12)··
   ✓ Generating static pages (12/12) in 5.2s
     Finalizing page optimization ...·
  Route (app)
  ┌ ○ /_not-found
  ├ ○ /bad-sourcemap
  ├ ○ /module-evaluation
  ├ ○ /rsc-anonymous-stack-frame-sandwich
  ├ ○ /rsc-error-log
  ├ ○ /rsc-error-log-cause
  ├ ○ /rsc-error-log-custom-name
  ├ ○ /rsc-error-log-ignore-listed
  ├ ○ /ssr-anonymous-stack-frame-sandwich
  ├ ○ /ssr-error-log-ignore-listed
  └ ◐ /ssr-throw··
  ○  (Static)             prerendered as static content
  ◐  (Partial Prerender)  prerendered as static HTML with dynamic server-streamed content·
     ▲ Next.js 16.0.0-canary.19
     - Local:        http://localhost:36951
     - Network:      http://135.181.236.24:36951·
   ✓ Starting...
   ✓ Ready in 230ms
  "
  at Object.toContain (e2e/app-dir/server-source-maps/server-source-maps.test.ts:297:52)

● app-dir - server source maps › sourcemaps errors during module evaluation

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

Expected substring: "
Error: module-evaluation

  at module evaluation (../../app/module-evaluation/module.js:1:22)"
  Received string:    "   ▲ Next.js 16.0.0-canary.19 (Turbopack, Cache Components)
     - Experiments (use with caution):
       · cpus: 1
       ✓ serverSourceMaps·
     Creating an optimized production build ...
   ✓ Compiled successfully in 2.5s
     Running TypeScript ...
     Collecting page data ...
     Generating static pages (0/12) ...
  Error: bad-sourcemap
  at <mangled> (../app/bad-sourcemap/custom:/[badhost]/app/bad-sourcemap/page.js:6:17)
      at stringify (<anonymous>)·
  Error: module-evaluation
  at module evaluation (../app/module-evaluation/module.js:1:22)
  > 1 | export const error = new Error('module-evaluation')
      |                      ^
    2 |
  Error: rsc-error-log-cause
  at <mangled> (../app/rsc-error-log-cause/page.js:2:17)
      at stringify (<anonymous>)
    1 | function logError(cause) {
  > 2 |   const error = new Error('rsc-error-log-cause', { cause })
      |                 ^
    3 |   console.error(error)
    4 | }
    5 | {
    [cause]: Error: Boom
  at <mangled> (../app/rsc-error-log-cause/page.js:7:17)
        at stringify (<anonymous>)
       5 |
       6 | export default function Page() {
    >  7 |   const error = new Error('Boom')
         |                 ^
       8 |   logError(error)
       9 |   return null
      10 | }
  }
  Error: rsc-error-log-custom-name-Foo
  at <mangled> (../app/rsc-error-log-custom-name/page.js:7:17)
      at stringify (<anonymous>)
     5 |
     6 | export default function Page() {
  >  7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
       |                 ^
     8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
     9 |   return null
    10 | }
  Error [MyError]: rsc-error-log-custom-name-Bar
  at <mangled> (../app/rsc-error-log-custom-name/page.js:8:17)
      at stringify (<anonymous>)
     6 | export default function Page() {
     7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
  >  8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
       |                 ^
     9 |   return null
    10 | }
    11 |
  Error: rsc-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:5:3)
      at stringify (<anonymous>)
    3 |
    4 | export default function Page() {
  > 5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
      |   ^
    6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
    7 |
    8 |   return null
  Error: rsc-anonymous-stack-frame-sandwich: internal
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:6:3)
      at stringify (<anonymous>)
    4 | export default function Page() {
    5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
  > 6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
      |   ^
    7 |
    8 |   return null
    9 | }
  Error: rsc-error-log-ignore-listed
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:17:11)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:16:9)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:15:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:14:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/rsc-error-log-ignore-listed/page.js:13:3)
      at stringify (<anonymous>)
     6 |
     7 | function logError() {
  >  8 |   const error = new Error('rsc-error-log-ignore-listed')
       |                 ^
     9 |   console.error(error)
    10 | }
    11 |
  Error: bad-sourcemap
  at <mangled> (../app/bad-sourcemap/custom:/[badhost]/app/bad-sourcemap/page.js:6:17)
      at stringify (<anonymous>)·
  Error: module-evaluation
  at module evaluation (../app/module-evaluation/module.js:1:22)
  > 1 | export const error = new Error('module-evaluation')
      |                      ^
    2 |
  Error: rsc-error-log-cause
  at <mangled> (../app/rsc-error-log-cause/page.js:2:17)
      at stringify (<anonymous>)
    1 | function logError(cause) {
  > 2 |   const error = new Error('rsc-error-log-cause', { cause })
      |                 ^
    3 |   console.error(error)
    4 | }
    5 | {
    [cause]: Error: Boom
  at <mangled> (../app/rsc-error-log-cause/page.js:7:17)
        at stringify (<anonymous>)
       5 |
       6 | export default function Page() {
    >  7 |   const error = new Error('Boom')
         |                 ^
       8 |   logError(error)
       9 |   return null
      10 | }
  }
  Error: rsc-error-log-custom-name-Foo
  at <mangled> (../app/rsc-error-log-custom-name/page.js:7:17)
      at stringify (<anonymous>)
     5 |
     6 | export default function Page() {
  >  7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
       |                 ^
     8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
     9 |   return null
    10 | }
  Error [MyError]: rsc-error-log-custom-name-Bar
  at <mangled> (../app/rsc-error-log-custom-name/page.js:8:17)
      at stringify (<anonymous>)
     6 | export default function Page() {
     7 |   console.error(new UnnamedError('rsc-error-log-custom-name-Foo'))
  >  8 |   console.error(new NamedError('rsc-error-log-custom-name-Bar'))
       |                 ^
     9 |   return null
    10 | }
    11 |
  Error: rsc-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:5:3)
      at stringify (<anonymous>)
    3 |
    4 | export default function Page() {
  > 5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
      |   ^
    6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
    7 |
    8 |   return null
  Error: rsc-anonymous-stack-frame-sandwich: internal
  at <mangled> (../app/rsc-anonymous-stack-frame-sandwich/page.js:6:3)
      at stringify (<anonymous>)
    4 | export default function Page() {
    5 |   runHiddenSetOfSetsExternal('rsc-anonymous-stack-frame-sandwich: external')
  > 6 |   runHiddenSetOfSetsInternal('rsc-anonymous-stack-frame-sandwich: internal')
      |   ^
    7 |
    8 |   return null
    9 | }
  Error: rsc-error-log-ignore-listed
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:8:17)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:17:11)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:16:9)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:15:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/rsc-error-log-ignore-listed/page.js:14:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/rsc-error-log-ignore-listed/page.js:13:3)
      at stringify (<anonymous>)
     6 |
     7 | function logError() {
  >  8 |   const error = new Error('rsc-error-log-ignore-listed')
       |                 ^
     9 |   console.error(error)
    10 | }
    11 |
     Generating static pages (3/12)··
     Generating static pages (6/12)··
  Error: rsc-error-log
  at <mangled> (../app/rsc-error-log/page.js:4:17)
      at stringify (<anonymous>)
    2 |
    3 | function logError() {
  > 4 |   const error = new Error('rsc-error-log')
      |                 ^
    5 |   console.error(error)
    6 | }
    7 |
  Error: ssr-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:6:3)
    4 |
    5 | export default function Page() {
  > 6 |   runHiddenSetOfSetsExternal('ssr-anonymous-stack-frame-sandwich: external')
      |   ^
    7 |   runHiddenSetOfSetsInternal('ssr-anonymous-stack-frame-sandwich: internal')
    8 |
    9 |   return null
  Error: ignore-listed frames
  at <unknown> (../internal-pkg/sourcemapped.ts:18:43)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:22)
      at Set.forEach (<anonymous>)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:9)
      at Set.forEach (<anonymous>)
  at <mangled> (../internal-pkg/sourcemapped.ts:9:13)
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:7:3)·
  Error: ssr-error-log-ignore-listed
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:9:17)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:18:11)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:17:9)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:16:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:15:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/ssr-error-log-ignore-listed/page.js:14:3)
     7 |
     8 | function logError() {
  >  9 |   const error = new Error('ssr-error-log-ignore-listed')
       |                 ^
    10 |   console.error(error)
    11 | }
    12 |
  Error: rsc-error-log
  at <mangled> (../app/rsc-error-log/page.js:4:17)
      at stringify (<anonymous>)
    2 |
    3 | function logError() {
  > 4 |   const error = new Error('rsc-error-log')
      |                 ^
    5 |   console.error(error)
    6 | }
    7 |
  Error: ssr-anonymous-stack-frame-sandwich: external
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:6:3)
    4 |
    5 | export default function Page() {
  > 6 |   runHiddenSetOfSetsExternal('ssr-anonymous-stack-frame-sandwich: external')
      |   ^
    7 |   runHiddenSetOfSetsInternal('ssr-anonymous-stack-frame-sandwich: internal')
    8 |
    9 |   return null
  Error: ignore-listed frames
  at <unknown> (../internal-pkg/sourcemapped.ts:18:43)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:22)
      at Set.forEach (<anonymous>)
  at <unknown> (../internal-pkg/sourcemapped.ts:10:9)
      at Set.forEach (<anonymous>)
  at <mangled> (../internal-pkg/sourcemapped.ts:9:13)
  at <mangled> (../app/ssr-anonymous-stack-frame-sandwich/page.js:7:3)·
  Error: ssr-error-log-ignore-listed
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:9:17)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:18:11)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:17:9)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:16:7)
  at <mangled> (../internal-pkg/sourcemapped.ts:5:10)
  at <unknown> (../app/ssr-error-log-ignore-listed/page.js:15:5)
  at <mangled> (../internal-pkg/index.js:2:10)
  at <mangled> (../app/ssr-error-log-ignore-listed/page.js:14:3)
     7 |
     8 | function logError() {
  >  9 |   const error = new Error('ssr-error-log-ignore-listed')
       |                 ^
    10 |   console.error(error)
    11 | }
    12 |
     Generating static pages (9/12)··
   ✓ Generating static pages (12/12) in 5.2s
     Finalizing page optimization ...·
  Route (app)
  ┌ ○ /_not-found
  ├ ○ /bad-sourcemap
  ├ ○ /module-evaluation
  ├ ○ /rsc-anonymous-stack-frame-sandwich
  ├ ○ /rsc-error-log
  ├ ○ /rsc-error-log-cause
  ├ ○ /rsc-error-log-custom-name
  ├ ○ /rsc-error-log-ignore-listed
  ├ ○ /ssr-anonymous-stack-frame-sandwich
  ├ ○ /ssr-error-log-ignore-listed
  └ ◐ /ssr-throw··
  ○  (Static)             prerendered as static content
  ◐  (Partial Prerender)  prerendered as static HTML with dynamic server-streamed content·
     ▲ Next.js 16.0.0-canary.19
     - Local:        http://localhost:36951
     - Network:      http://135.181.236.24:36951·
   ✓ Starting...
   ✓ Ready in 230ms
  "
  at Object.toContain (e2e/app-dir/server-source-maps/server-source-maps.test.ts:527:52)

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

  • Cache Components Errors > Dev > Dynamic Metadata - Error Route > should show a collapsed redbox error (DD)
Expand output

● Cache Components Errors › Dev › Dynamic Metadata - Error Route › should show a collapsed redbox error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Dev Dynamic Metadata - Error Route should show a collapsed redbox error 1`

- Snapshot  - 4
+ Received  + 4

@@ -14,14 +14,14 @@
  Note that request-specific information — such as params, cookies, and headers — is not available during static prerendering, so must be wrapped in <Suspense>.

  Learn more: https://nextjs.org/docs/messages/blocking-route",
    "environmentLabel": "Server",
    "label": "Blocking Route",
-   "source": "app/dynamic-metadata-error-route/page.tsx (20:16) @ Dynamic
- > 20 | async function Dynamic() {
-      |                ^",
+   "source": "app/dynamic-metadata-error-route/page.tsx (21:9) @ Dynamic
+ > 21 |   await new Promise((r) => setTimeout(r))
+      |         ^",
    "stack": [
-     "Dynamic app/dynamic-metadata-error-route/page.tsx (20:16)",
+     "Dynamic app/dynamic-metadata-error-route/page.tsx (21:9)",
      "Page app/dynamic-metadata-error-route/page.tsx (15:7)",
      "LogSafely <anonymous>",
    ],
  }

  155 |           const browser = await next.browser(pathname)
  156 |
> 157 |           await expect(browser).toDisplayCollapsedRedbox(`
      |                                 ^
  158 |            {
  159 |              "description": "Uncached data was accessed outside of <Suspense>
  160 | 

  at Object.toDisplayCollapsedRedbox (e2e/app-dir/cache-components-errors/cache-components-errors.test.ts:157:33)

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 (DD)
Expand output

● 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  - 2
+ Received  + 2

@@ -1,17 +1,17 @@
  "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 (../../../../app/client/page.tsx:4:28)
+     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
  Error: Route "/server" used `Math.random()` before accessing either uncached data (e.g. `fetch()`) or Request data (e.g. `cookies()`, `headers()`, `connection()`, and `searchParams`). Accessing random values synchronously in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-random
-     at Page (../../../../app/server/page.tsx:13:27)
+     at Page (bundler:///app/server/page.tsx:13:27)
    11 |   await cachedDelay()
    12 |
  > 13 |   return <p>Random: {Math.random()}</p>
       |                           ^
    14 | }

  184 |
  185 |       it('shows all prerender errors with readable stacks and code frames', async () => {
> 186 |         expect(getPrerenderOutput(next.cliOutput)).toMatchInlineSnapshot(`
      |                                                    ^
  187 |          "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
  188 |              at Page (../../../../app/client/page.tsx:4:28)
  189 |            2 |

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

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

  • app dir - basepath > should successfully hard navigate from pages -> app (DD)
Expand output

● app dir - basepath › should successfully hard navigate from pages -> app

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

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/app-basepath/index.test.ts:16:19)

pnpm test-start test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts

  • app dir client cache with parallel routes > prefetch={true} > should prefetch the full page (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should prefetch the full page

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  16 |
  17 |   describe('prefetch={true}', () => {
> 18 |     it('should prefetch the full page', async () => {
     |     ^
  19 |       let act: ReturnType<typeof createRouterAct>
  20 |       const browser = await next.browser('/', {
  21 |         beforePageLoad(page) {

  at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:18:5)
  at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:17:3)
  at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:6:1)

pnpm test-dev test/e2e/app-dir/actions/app-action.test.ts

  • app-dir action handling > fetch actions > should handle redirects to routes that provide an invalid RSC response (DD)
Expand output

● app-dir action handling › fetch actions › should handle redirects to routes that provide an invalid RSC response

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

Expected substring: "Hello from a pages route"
Received string:    "0.3437876714821424
Client
Server
Client and Server
0
+1+1 (Slow)-1*2
redirect to a pages route
submit
test"

  1293 |
  1294 |       await retry(async () => {
> 1295 |         expect(await browser.elementByCss('body').text()).toContain(
       |                                                           ^
  1296 |           'Hello from a pages route'
  1297 |         )
  1298 |         expect(await browser.url()).toBe(`${next.url}/pages-dir`)

  at toContain (e2e/app-dir/actions/app-action.test.ts:1295:59)
  at retry (lib/next-test-utils.ts:808:14)
  at Object.<anonymous> (e2e/app-dir/actions/app-action.test.ts:1294:7)

@codspeed-hq
Copy link

codspeed-hq bot commented Oct 21, 2025

CodSpeed Performance Report

Merging #85146 will not alter performance

Comparing relative_file_paths_in_node (bdd9dd2) with canary (fcc3157)

Summary

✅ 17 untouched
⏩ 3 skipped1

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@lukesandberg lukesandberg force-pushed the relative_file_paths_in_node branch 2 times, most recently from 3a3b32b to daa9002 Compare October 21, 2025 05:01
@lukesandberg lukesandberg marked this pull request as ready for review October 21, 2025 05:02
@lukesandberg lukesandberg requested a review from a team October 21, 2025 05:02
Copy link
Member

@sokra sokra left a comment

Choose a reason for hiding this comment

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

Verify the url encoding

@mischnic mischnic force-pushed the relative_file_paths_in_node branch from fb49671 to 18dcf6d Compare October 21, 2025 16:22
@mischnic mischnic force-pushed the relative_file_paths_in_node branch from 18dcf6d to 76bce6e Compare October 21, 2025 16:28
@mischnic mischnic requested a review from sokra October 21, 2025 16:46
@mischnic mischnic force-pushed the relative_file_paths_in_node branch from be0db13 to 0728dc0 Compare October 21, 2025 17:40
@ijjk ijjk added the tests label Oct 21, 2025
@mischnic mischnic force-pushed the relative_file_paths_in_node branch from 0728dc0 to 44ce97f Compare October 21, 2025 17:41
@lukesandberg lukesandberg force-pushed the relative_file_paths_in_node branch from 44ce97f to 46f7eee Compare October 21, 2025 18:42
Copy link
Contributor Author

ok, 'verified' the uri encoding. tl;dr; things are bad, this doesn't make them worse
updating snapshots

Copy link
Contributor Author

there is a question about why the paths are different when you pass --debug-prerender. I ruled out it being something related to the working directory changing, so it must be something about the outputs changing. im guessing in this case we should just use absolute paths like we do in dev?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team. examples Issue was opened via the examples template. tests Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants