Skip to content

Conversation

@sokra
Copy link
Member

@sokra sokra commented Dec 22, 2025

What?

  • Compute the approximate distance to leaf in the dependency graph
  • Prioritize tasks re-computing by distance to leaf, running leaf tasks first

This ensures that it's less likely that tasks are re-executed multiple times due to bad ordering.
This adresses the "diamond" problem where a task is invalidated multiple times due to multiple paths of invalidation to that task.

Copy link
Member Author

sokra commented Dec 22, 2025

@nextjs-bot
Copy link
Collaborator

Allow CI Workflow Run

  • approve CI run for commit: 2795c1b

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

1 similar comment
@nextjs-bot
Copy link
Collaborator

Allow CI Workflow Run

  • approve CI run for commit: 2795c1b

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

@sokra sokra changed the title Turbopack: compute leaf distance Turbopack: run tasks with priority based on distance to leaf Dec 22, 2025
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Dec 22, 2025

Tests Passed

@nextjs-bot
Copy link
Collaborator

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js sokra/task-prio Change
buildDuration 17.2s 15s N/A
buildDurationCached 13.9s 10.9s N/A
nodeModulesSize 456 MB 456 MB
nextStartRea..uration (ms) 715ms 719ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 51.2 kB 51 kB N/A
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 254 B N/A
main-HASH.js gzip 38.3 kB 38.7 kB ⚠️ +375 B
webpack-HASH.js gzip 1.68 kB 1.69 kB N/A
Overall change 38.5 kB 38.9 kB ⚠️ +375 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js sokra/task-prio 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 sokra/task-prio Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 1.8 kB N/A
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.12 kB 1.12 kB
Client Build Manifests
vercel/next.js canary vercel/next.js sokra/task-prio Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js sokra/task-prio Change
index.html gzip 523 B 526 B N/A
link.html gzip 537 B 539 B N/A
withRouter.html gzip 519 B 521 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 237 kB 238 kB ⚠️ +600 B
Overall change 237 kB 238 kB ⚠️ +600 B
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
middleware-b..fest.js gzip 654 B 655 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.7 kB 33 kB ⚠️ +298 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 33.5 kB 33.8 kB ⚠️ +298 B
Next Runtimes
vercel/next.js canary vercel/next.js sokra/task-prio Change
app-page-exp...dev.js gzip 301 kB 301 kB N/A
app-page-exp..prod.js gzip 156 kB 156 kB
app-page-tur...dev.js gzip 301 kB 301 kB N/A
app-page-tur..prod.js gzip 156 kB 156 kB
app-page-tur...dev.js gzip 298 kB 298 kB
app-page-tur..prod.js gzip 154 kB 154 kB
app-page.run...dev.js gzip 298 kB 298 kB N/A
app-page.run..prod.js gzip 154 kB 154 kB
app-route-ex...dev.js gzip 68.6 kB 68.6 kB
app-route-ex..prod.js gzip 47.4 kB 47.4 kB
app-route-tu...dev.js gzip 68.6 kB 68.6 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.2 kB 68.2 kB
app-route-tu..prod.js gzip 47.2 kB 47.2 kB
app-route.ru...dev.js gzip 68.2 kB 68.2 kB
app-route.ru..prod.js gzip 47.2 kB 47.2 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41 kB 41 kB
pages-api-tu..prod.js gzip 31.1 kB 31.1 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.1 kB 31.1 kB
pages-turbo....dev.js gzip 50.6 kB 50.6 kB
pages-turbo...prod.js gzip 38.1 kB 38.1 kB
pages.runtim...dev.js gzip 50.6 kB 50.6 kB
pages.runtim..prod.js gzip 38.1 kB 38.1 kB
server.runti..prod.js gzip 59.8 kB 59.8 kB
Overall change 1.76 MB 1.76 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
0.pack gzip 3.61 MB 3.61 MB ⚠️ +5.81 kB
index.pack gzip 98.2 kB 99.4 kB ⚠️ +1.2 kB
Overall change 3.7 MB 3.71 MB ⚠️ +7.01 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

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-8ed3486bb68dd6c6.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +45,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "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__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +134,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +234,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_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__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +286,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -524,7 +524,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (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__(4312);
+      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
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (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__(4312);
-      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
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Commit: 2795c1b

@diffray-bot
Copy link

Review Summary

Free public review - Want AI code reviews on your PRs? Check out diffray.ai

Validated 17 issues: 3 kept (verified unwrap concerns on new code), 14 filtered (pre-existing code not in PR diff, low value, or speculative)

Issues Found: 3

See 3 individual line comment(s) for details.

📋 Full issue list (click to expand)

🟡 MEDIUM - unwrap() on hash map get_mut

Category: bug

File: turbopack/crates/turbo-tasks-backend/src/backend/operation/leaf_distance_update.rs:94

Description: unwrap() is called on leaf_distance_updates.get_mut(&task_id) without verifying the key exists. While the task_id should exist because it was just popped from the queue, adding documentation or using expect() would improve clarity.

Suggestion: Use expect() with a message: .get_mut(&task_id).expect("task_id must exist in leaf_distance_updates because it was added when pushed to queue")

Confidence: 70%

Rule: bug_unwrap_rust


🟡 MEDIUM - Potential O(N) iteration in leaf distance update loop

Category: performance

File: turbopack/crates/turbo-tasks-backend/src/backend/operation/leaf_distance_update.rs:147-154

Description: The iter_many! macro iterates over all OutputDependents of a task within the main processing loop. In a large dependency graph with many dependents, this could create overhead. However, the MAX_COUNT_BEFORE_YIELD (1000) provides yielding to avoid blocking.

Suggestion: Consider documenting the expected number of dependents per task, or if tasks can have many dependents, consider batching or limiting the update frequency.

Confidence: 60%

Rule: perf_quadratic_loops


🔵 LOW - Magic numbers for leaf distance algorithm

Category: quality

File: turbopack/crates/turbo-tasks-backend/src/backend/operation/leaf_distance_update.rs:21-22

Description: Constants MAX_COUNT_BEFORE_YIELD (1000) and BASE_LEAF_DISTANCE_BUFFER (128) are used without documentation explaining why these specific values were chosen.

Suggestion: Add documentation comments explaining the rationale for these values and how they affect performance and correctness.

Confidence: 60%

Rule: qual_magic_numbers_rust


Powered by diffray - Multi-Agent Code Review Agent

@sokra sokra changed the base branch from sokra/fs-no-blocking-task to graphite-base/87662 January 5, 2026 11:38
@sokra sokra force-pushed the graphite-base/87662 branch from 2385f3a to 8a942f8 Compare January 5, 2026 18:43
@sokra sokra changed the base branch from graphite-base/87662 to sokra/deterministic-graph-traversal January 5, 2026 18:44
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 5, 2026

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js sokra/task-prio Change
buildDuration 16.9s 14.8s N/A
buildDurationCached 13.8s 10.8s N/A
nodeModulesSize 457 MB 457 MB N/A
nextStartRea..uration (ms) 716ms 714ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 52.5 kB 51 kB N/A
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 253 B N/A
main-HASH.js gzip 38.4 kB 38.7 kB ⚠️ +368 B
webpack-HASH.js gzip 1.68 kB 1.69 kB N/A
Overall change 38.5 kB 38.9 kB ⚠️ +368 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js sokra/task-prio 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 sokra/task-prio Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 1.8 kB N/A
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.12 kB 1.12 kB
Client Build Manifests
vercel/next.js canary vercel/next.js sokra/task-prio Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js sokra/task-prio Change
index.html gzip 523 B 525 B N/A
link.html gzip 537 B 539 B N/A
withRouter.html gzip 520 B 521 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js sokra/task-prio Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 238 kB 238 kB N/A
Overall change 0 B 0 B
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
middleware-b..fest.js gzip 651 B 657 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.6 kB 32.9 kB ⚠️ +343 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 33.4 kB 33.7 kB ⚠️ +343 B
Next Runtimes
vercel/next.js canary vercel/next.js sokra/task-prio Change
app-page-exp...dev.js gzip 302 kB 301 kB N/A
app-page-exp..prod.js gzip 157 kB 156 kB N/A
app-page-tur...dev.js gzip 302 kB 301 kB N/A
app-page-tur..prod.js gzip 157 kB 156 kB N/A
app-page-tur...dev.js gzip 299 kB 298 kB N/A
app-page-tur..prod.js gzip 155 kB 154 kB N/A
app-page.run...dev.js gzip 299 kB 298 kB N/A
app-page.run..prod.js gzip 155 kB 154 kB N/A
app-route-ex...dev.js gzip 68.7 kB 68.7 kB
app-route-ex..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.7 kB 68.7 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.3 kB 68.3 kB
app-route-tu..prod.js gzip 47.3 kB 47.3 kB
app-route.ru...dev.js gzip 68.3 kB 68.3 kB
app-route.ru..prod.js gzip 47.3 kB 47.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41.1 kB 41.1 kB
pages-api-tu..prod.js gzip 31.2 kB 31.2 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.2 kB 31.2 kB
pages-turbo....dev.js gzip 50.7 kB 50.7 kB
pages-turbo...prod.js gzip 38.2 kB 38.2 kB
pages.runtim...dev.js gzip 50.6 kB 50.6 kB
pages.runtim..prod.js gzip 38.1 kB 38.1 kB
server.runti..prod.js gzip 59.9 kB 59.9 kB
Overall change 847 kB 847 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js sokra/task-prio Change
0.pack gzip 3.62 MB 3.62 MB ⚠️ +146 B
index.pack gzip 99.5 kB 98.7 kB N/A
Overall change 3.62 MB 3.62 MB ⚠️ +146 B
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-8ed3486bb68dd6c6.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +45,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "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__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +134,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +234,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_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__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +286,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -524,7 +524,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (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__(4312);
+      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
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (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__(4312);
-      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
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for app-page-exp..ntime.dev.js

Diff too large to display

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

Diff too large to display

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

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Commit: 7182c97

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 5, 2026

❌ 480 failing tests in 25 jobs

Updated 2026-01-05 19:14:24 UTC · Commit: 7182c97

File Failures Category
test/development/acceptance-app/ReactRefreshRegression.test.ts 7 turbopack dev
test/development/acceptance-app/rsc-build-errors.test.ts 9 turbopack dev
test/development/acceptance/ReactRefreshLogBox-app-doc.test.ts 2 turbopack dev
test/development/app-dir/hmr-symlink/hmr-symlink.test.ts 3 turbopack dev
test/development/app-dir/server-components-hmr-cache/server-components-hmr-cache.test.ts 16 turbopack dev
test/development/basic/gssp-ssr-change-reloading/test/index.test.ts 12 turbopack dev
test/e2e/app-dir/actions/app-action-form-state-node-middleware.test.ts 4 turbopack production
test/e2e/app-dir/actions/app-action-node-middleware.test.ts 78 turbopack production
test/e2e/app-dir/actions/app-action-size-limit-invalid-node-middleware.test.ts 5 turbopack production
test/e2e/app-dir/app-static/app-static-custom-handler.test.ts 91 turbopack production
test/e2e/app-dir/app-static/app-static.test.ts 105 turbopack production
test/e2e/app-dir/app/experimental-compile.test.ts 113 turbopack production
test/e2e/app-dir/app/standalone.test.ts 2 turbopack production
test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts 1 prod
test/integration/app-document-remove-hmr/test/index.test.ts 4 turbopack production integration, turbopack development integration
test/integration/config-output-export/test/index.test.ts 10 turbopack production integration, turbopack development integration
test/integration/env-config/test/index.test.ts 8 turbopack development integration
test/integration/jsconfig-baseurl/test/index.test.ts 1 turbopack development integration
test/integration/middleware-dev-update/test/index.test.ts 3 turbopack development integration, turbopack production integration
test/integration/non-standard-node-env-warning/test/index.test.ts 2 turbopack production integration
test/integration/typescript-hmr/test/index.test.ts 4 turbopack development integration, turbopack production integration

Details

📁 test/development/acceptance-app/ReactRefreshRegression.test.ts — 7 failures
ReactRefreshRegression app > can fast refresh a page with static generation · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "can fast refresh a page with static generation"
Error: expect(received).toBe(expected) // Object.is equality

Expected: "0"
Received: ""
    at Object.toBe (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:108:7)
ReactRefreshRegression app > can fast refresh a page with dynamic rendering · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "can fast refresh a page with dynamic rendering"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:158:5)
ReactRefreshRegression app > can fast refresh a page with config · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "can fast refresh a page with config"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:238:5)
ReactRefreshRegression app > shows an overlay for anonymous function server-side error · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "shows an overlay for anonymous function server-side error"
TypeError: Cannot read properties of null (reading 'split')
    at Object.split (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:283:19)
ReactRefreshRegression app > shows an overlay for server-side error in server component · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "shows an overlay for server-side error in server component"
TypeError: Cannot read properties of null (reading 'split')
    at Object.split (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:302:19)
ReactRefreshRegression app > shows an overlay for server-side error in client component · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "shows an overlay for server-side error in client component"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:313:5)
ReactRefreshRegression app > custom loader mdx should have Fast Refresh enabled · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshRegression.test.ts -t "custom loader mdx should have Fast Refresh enabled"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/ReactRefreshRegression.test.ts:367:24)
📁 test/development/acceptance-app/rsc-build-errors.test.ts — 9 failures
Error overlay - RSC build errors > should throw an error when getServerSideProps is used · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should throw an error when getServerSideProps is used"
TypeError: Cannot read properties of null (reading 'includes')
    at Object.toInclude (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/jest-extended@4.0.2_jest@29.7.0_@types+node@20.17.6_patch_hash=rvl3vkomen3tospgr67bzubfyu__babel-plugin-macros@3.1.0_/node_modules/jest-extended/dist/matchers/toInclude.js:13:23)
    at __EXTERNAL_MATCHER_TRAP__ (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.js:325:30)
    at Object.throwingMatcher [as toInclude] (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.js:326:15)
    at Object.toInclude (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:28:45)
Error overlay - RSC build errors > should throw an error when metadata export is used in client components · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should throw an error when metadata export is used in client components"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:48:5)
Error overlay - RSC build errors > should throw an error when metadata exports are used together in server components · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should throw an error when metadata exports are used together in server components"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:88:5)
Error overlay - RSC build errors > should throw an error when "Component" is imported in server components · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should throw an error when "Component" is imported in server components"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:149:5)
Error overlay - RSC build errors > should allow to use and handle rsc poisoning server-only · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should allow to use and handle rsc poisoning server-only"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:273:5)
Error overlay - RSC build errors > should error for invalid undefined module retuning from next dynamic · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should error for invalid undefined module retuning from next dynamic"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:393:5)
Error overlay - RSC build errors > should throw an error when error file is a server component · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should throw an error when error file is a server component"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:412:5)
Error overlay - RSC build errors > should throw an error when error file is a server component with empty error file · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should throw an error when error file is a server component with empty error file"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:465:5)
Error overlay - RSC build errors > should freeze parent resolved metadata to avoid mutating in generateMetadata · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance-app/rsc-build-errors.test.ts -t "should freeze parent resolved metadata to avoid mutating in generateMetadata"
Error: expect(received).toContain(expected) // indexOf

Expected substring: "Cannot add property x, object is not extensible"
Received string:    "An unexpected Turbopack error occurred. Please see the output of `next dev` for more details."
    at Object.toContain (/root/actions-runner/_work/next.js/next.js/test/development/acceptance-app/rsc-build-errors.test.ts:516:50)
📁 test/development/acceptance/ReactRefreshLogBox-app-doc.test.ts — 2 failures
ReactRefreshLogBox _app _document > _app syntax error shows logbox · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance/ReactRefreshLogBox-app-doc.test.ts -t "_app syntax error shows logbox"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance/ReactRefreshLogBox-app-doc.test.ts:179:5)
ReactRefreshLogBox _app _document > _document syntax error shows logbox · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/acceptance/ReactRefreshLogBox-app-doc.test.ts -t "_document syntax error shows logbox"
Error: Application is in inconsistent state: timeout.
    at Object.patch (/root/actions-runner/_work/next.js/next.js/test/lib/development-sandbox.ts:115:21)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/acceptance/ReactRefreshLogBox-app-doc.test.ts:286:5)
📁 test/development/app-dir/hmr-symlink/hmr-symlink.test.ts — 3 failures
HMR symlinks > tracks updates to symlinked target · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/app-dir/hmr-symlink/hmr-symlink.test.ts -t "tracks updates to symlinked target"
Error: Expected no visible Redbox but found one
header: Runtime Error
An unexpected Turbopack error occurred. Please see the output of `next dev` for more details.
description: An unexpected Turbopack error occurred. Please see the output of `next dev` for more details.
source: null
    at runNextTicks (node:internal/process/task_queues:60:5)
    at processImmediate (node:internal/timers:449:9)
    at process.callbackTrampoline (node:internal/async_hooks:130:17)
    at /root/actions-runner/_work/next.js/next.js/test/development/app-dir/hmr-symlink/hmr-symlink.test.ts:24:11
    at retry (/root/actions-runner/_work/next.js/next.js/test/lib/next-test-utils.ts:797:14)
    at /root/actions-runner/_work/next.js/next.js/test/development/app-dir/hmr-symlink/hmr-symlink.test.ts:23:9
    at NextDevInstance.patchFile (/root/actions-runner/_work/next.js/next.js/test/lib/next-modes/base.ts:716:9)
    at NextDevInstance.patchFile (/root/actions-runner/_work/next.js/next.js/test/lib/next-modes/next-dev.ts:303:16)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/app-dir/hmr-symlink/hmr-symlink.test.ts:19:5)
HMR symlinks > tracks updates to the symlink · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/app-dir/hmr-symlink/hmr-symlink.test.ts -t "tracks updates to the symlink"
page.goto: Timeout 60000ms exceeded.
Call log:
  - navigating to "http://localhost:40365/symlink-link", waiting until "load"

    at Playwright.goto (/root/actions-runner/_work/next.js/next.js/test/lib/browsers/playwright.ts:345:16)
    at webdriver (/root/actions-runner/_work/next.js/next.js/test/lib/next-webdriver.ts:156:3)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/app-dir/hmr-symlink/hmr-symlink.test.ts:38:23)
HMR symlinks > tracks updates to the middle of a symlink chain · turbopack dev

Datadog Job · 7-day History · CI Logs

pnpm test-dev-turbo test/development/app-dir/hmr-symlink/hmr-symlink.test.ts -t "tracks updates to the middle of a symlink chain"
page.goto: Timeout 60000ms exceeded.
Call log:
  - navigating to "http://localhost:40365/symlink-chain", waiting until "load"

    at Playwright.goto (/root/actions-runner/_work/next.js/next.js/test/lib/browsers/playwright.ts:345:16)
    at webdriver (/root/actions-runner/_work/next.js/next.js/test/lib/next-webdriver.ts:156:3)
    at Object.<anonymous> (/root/actions-runner/_work/next.js/next.js/test/development/app-dir/hmr-symlink/hmr-symlink.test.ts:68:23)

⚠️ 459 more failures (details omitted due to size limit)

...opment/basic/gssp-ssr-change-reloading/test/index.test.ts (12)

GS(S)P Server-Side Change Reloading > should not reload page when client-side is changed too GSP

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update page when getStaticProps is changed only

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should show indicator when re-fetching data

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update page when getStaticPaths is changed only

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update page when getStaticProps is changed only for /index

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update page when getStaticProps is changed only for /another/index

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should keep scroll position when updating from change in getStaticProps

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should not reload page when client-side is changed too GSSP

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update page when getServerSideProps is changed only

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update on props error in getStaticProps

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should update on thrown error in getStaticProps

  • turbopack dev · DD

GS(S)P Server-Side Change Reloading > should refresh data when server import is updated

  • turbopack dev · DD
...dir/actions/app-action-form-state-node-middleware.test.ts (4)

app-dir action useActionState > should support submitting form state with JS

  • turbopack production · DD

app-dir action useActionState > should support submitting form state without JS

  • turbopack production · DD

app-dir action useActionState > should support hydrating the app from progressively enhanced form request

  • turbopack production · DD

app-dir action useActionState > should send the action to the provided permalink with form state when JS disabled

  • turbopack production · DD
test/e2e/app-dir/actions/app-action-node-middleware.test.ts (78)

app-dir action handling > should output exportName and filename info in manifest

  • turbopack production · DD

app-dir action handling > should handle action correctly with middleware rewrite

  • turbopack production · DD

app-dir action handling > should handle basic actions correctly

  • turbopack production · DD

app-dir action handling > should report errors with bad inputs correctly

  • turbopack production · DD

app-dir action handling > should propagate errors from a text/plain response to an error boundary

  • turbopack production · DD

app-dir action handling > should trigger an error boundary for action responses with an invalid content-type

  • turbopack production · DD

app-dir action handling > should support headers and cookies

  • turbopack production · DD

app-dir action handling > should support setting cookies when redirecting (with javascript)

  • turbopack production · DD

app-dir action handling > should support setting cookies when redirecting (no javascript)

  • turbopack production · DD

app-dir action handling > should push new route when redirecting

  • turbopack production · DD

app-dir action handling > should replace current route when redirecting with type set to replace

  • turbopack production · DD

app-dir action handling > should support headers in client imported actions

  • turbopack production · DD

app-dir action handling > should not log errors for non-action form POSTs

  • turbopack production · DD

app-dir action handling > should support setting cookies in route handlers with the correct overrides

  • turbopack production · DD

app-dir action handling > should support formData and redirect

  • turbopack production · DD

app-dir action handling > should support .bind

  • turbopack production · DD

app-dir action handling > should support chained .bind

  • turbopack production · DD

app-dir action handling > should support notFound (javascript disabled)

  • turbopack production · DD

app-dir action handling > should support notFound

  • turbopack production · DD

app-dir action handling > should support uploading files

  • turbopack production · DD

app-dir action handling > should support hoc auth wrappers

  • turbopack production · DD

app-dir action handling > should support importing actions in client components

  • turbopack production · DD

app-dir action handling > should support importing the same action module instance in both server and action layers

  • turbopack production · DD

app-dir action handling > should not block navigation events while a server action is in flight

  • turbopack production · DD

app-dir action handling > should not block router.back() while a server action is in flight

  • turbopack production · DD

app-dir action handling > should trigger a refresh for a server action that also dispatches a navigation event

  • turbopack production · DD

app-dir action handling > should support next/dynamic with ssr: false

  • turbopack production · DD

app-dir action handling > should support next/dynamic with ssr: false (edge)

  • turbopack production · DD

app-dir action handling > should only submit action once when resubmitting an action after navigation

  • turbopack production · DD

app-dir action handling > should handle actions executed in quick succession

  • turbopack production · DD

app-dir action handling > should reset the form state when the action redirects to a page that contains the same form

  • turbopack production · DD

app-dir action handling > should invalidate the client router cache if the redirect action triggers a revalidation

  • turbopack production · DD

app-dir action handling > should be possible to catch network errors

  • turbopack production · DD

app-dir action handling > should be possible to catch regular errors

  • turbopack production · DD

app-dir action handling > should keep action instances identical

  • turbopack production · DD

app-dir action handling > should forward action request to a worker that contains the action handler (node)

  • turbopack production · DD

app-dir action handling > should forward action request to a worker that contains the action handler (edge)

  • turbopack production · DD

app-dir action handling > should not error when a forwarded action triggers a redirect (node)

  • turbopack production · DD

app-dir action handling > should not error when a forwarded action triggers a redirect (edge)

  • turbopack production · DD

app-dir action handling > should not expose action content in sourcemaps

  • turbopack production · DD

app-dir action handling > Edge SSR > should handle basic actions correctly

  • turbopack production · DD

app-dir action handling > Edge SSR > should return error response for hoc auth wrappers in edge runtime

  • turbopack production · DD

app-dir action handling > Edge SSR > should handle calls to redirect() with a relative URL in a single pass

  • turbopack production · DD

app-dir action handling > Edge SSR > should handle calls to redirect() with a absolute URL in a single pass

  • turbopack production · DD

app-dir action handling > Edge SSR > should handle calls to redirect() with external URLs

  • turbopack production · DD

app-dir action handling > Edge SSR > should allow cookie and header async storages

  • turbopack production · DD

app-dir action handling > Edge SSR > should handle unicode search params

  • turbopack production · DD

app-dir action handling > fetch actions > should handle a fetch action initiated from a static page

  • turbopack production · DD

app-dir action handling > fetch actions > should handle calls to redirect() with a relative URL in a single pass

  • turbopack production · DD

app-dir action handling > fetch actions > should handle calls to redirect() with a absolute URL in a single pass

  • turbopack production · DD

app-dir action handling > fetch actions > should handle calls to redirect() with external URLs

  • turbopack production · DD

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

  • turbopack production · DD

app-dir action handling > fetch actions > should handle revalidatePath

  • turbopack production · DD

app-dir action handling > fetch actions > should handle revalidateTag

  • turbopack production · DD

app-dir action handling > fetch actions > should store revalidation data in the prefetch cache

  • turbopack production · DD

app-dir action handling > fetch actions > should revalidate when cookies.set is called

  • turbopack production · DD

app-dir action handling > fetch actions > should invalidate client cache on other routes when cookies.set is called

  • turbopack production · DD

app-dir action handling > fetch actions > should revalidate when cookies.set is called in a client action

  • turbopack production · DD

app-dir action handling > fetch actions > should invalidate client cache when tag is revalidated

  • turbopack production · DD

app-dir action handling > fetch actions > should invalidate client cache when path is revalidated

  • turbopack production · DD

app-dir action handling > should work with interception routes

  • turbopack production · DD

app-dir action handling > encryption > should send encrypted values from the closed over closure

  • turbopack production · DD

app-dir action handling > encryption > should be able to resolve other server actions and client components

  • turbopack production · DD

app-dir action handling > redirects > redirects properly when route handler uses redirect

  • turbopack production · DD

app-dir action handling > redirects > redirects properly when route handler uses permanentRedirect

  • turbopack production · DD

app-dir action handling > redirects > displays searchParams correctly when redirecting with SearchParams

  • turbopack production · DD

app-dir action handling > redirects > merges cookies correctly when redirecting

  • turbopack production · DD

app-dir action handling > redirects > should not forward next-action header to a redirected RSC request

  • turbopack production · DD

app-dir action handling > redirects > redirects properly when route handler redirects with a 307 status code

  • turbopack production · DD

app-dir action handling > redirects > redirects properly when route handler redirects with a 308 status code

  • turbopack production · DD

app-dir action handling > server actions render client components > server component imported action > should support importing client components from actions

  • turbopack production · DD

app-dir action handling > caching disabled by default > should use no-store as default for server action

  • turbopack production · DD

app-dir action handling > caching disabled by default > should not override force-cache in server action

  • turbopack production · DD

app-dir action handling > caching disabled by default > should not override revalidate in server action

  • turbopack production · DD

app-dir action handling > request body decoding > should correctly decode multi-byte characters in the request body (node)

  • turbopack production · DD

app-dir action handling > request body decoding > should correctly decode multi-byte characters in the request body (edge)

  • turbopack production · DD

app-dir action handling > action discarding > should not trigger a refresh for a server action that gets discarded due to a navigation (without revalidation)

  • turbopack production · DD

app-dir action handling > action discarding > should trigger a refresh for a server action that gets discarded due to a navigation (with revalidation)

  • turbopack production · DD
...ons/app-action-size-limit-invalid-node-middleware.test.ts (5)

app-dir action size limit invalid config > should respect the size set in serverActions.bodySizeLimit for plaintext fetch actions > should not error for requests that stay below the size limit

  • turbopack production · DD

app-dir action size limit invalid config > should respect the size set in serverActions.bodySizeLimit for plaintext fetch actions > should error for requests that exceed the size limit

  • turbopack production · DD

app-dir action size limit invalid config > should respect the size set in serverActions.bodySizeLimit for multipart fetch actions > should not error for requests that stay below the size limit

  • turbopack production · DD

app-dir action size limit invalid config > should respect the size set in serverActions.bodySizeLimit for multipart fetch actions > should not error for requests that are at the size limit

  • turbopack production · DD

app-dir action size limit invalid config > should respect the size set in serverActions.bodySizeLimit for multipart fetch actions > should error for requests that exceed the size limit

  • turbopack production · DD
.../e2e/app-dir/app-static/app-static-custom-handler.test.ts (91)

app-dir static/dynamic handling > should respond correctly for dynamic route with dynamicParams false in layout

  • turbopack production · DD

app-dir static/dynamic handling > should respond correctly for partially dynamic route with dynamicParams false in layout

  • turbopack production · DD

app-dir static/dynamic handling > should use auto no cache when no fetch config

  • turbopack production · DD

app-dir static/dynamic handling > should correctly handle "default" cache statuses

  • turbopack production · DD

app-dir static/dynamic handling > should still cache even though the W3C trace context headers traceparent and tracestate were different

  • turbopack production · DD

app-dir static/dynamic handling > should warn for too many cache tags

  • turbopack production · DD

app-dir static/dynamic handling > should propagate unstable_cache tags correctly

  • turbopack production · DD

app-dir static/dynamic handling > should infer a fetchCache of force-no-store when force-dynamic is used

  • turbopack production · DD

app-dir static/dynamic handling > should infer a fetch cache of "force-cache" when force-dynamic is used on a fetch with revalidate

  • turbopack production · DD

app-dir static/dynamic handling > force-dynamic should supercede a "default" cache value

  • turbopack production · DD

app-dir static/dynamic handling > fetchCache config should supercede dynamic config when force-dynamic is used

  • turbopack production · DD

app-dir static/dynamic handling > fetch cache should supercede dynamic config when force-dynamic is used

  • turbopack production · DD

app-dir static/dynamic handling > should correctly include headers instance in cache key

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/unstable-cache-node

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/unstable-cache-edge

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/api/unstable-cache-node

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/api/unstable-cache-edge

  • turbopack production · DD

app-dir static/dynamic handling > should not have cache tags header for non-minimal mode

  • turbopack production · DD

app-dir static/dynamic handling > should correctly skip caching POST fetch for POST handler

  • turbopack production · DD

app-dir static/dynamic handling > should correctly handle fetchCache = "force-no-store"

  • turbopack production · DD

app-dir static/dynamic handling > should not cache non-ok statusCode

  • turbopack production · DD

app-dir static/dynamic handling > should not encode dynamic parameters as search parameters in RSC data

  • turbopack production · DD

app-dir static/dynamic handling > should output HTML/RSC files for static paths

  • turbopack production · DD

app-dir static/dynamic handling > should have correct prerender-manifest entries

  • turbopack production · DD

app-dir static/dynamic handling > should output debug info for static bailouts

  • turbopack production · DD

app-dir static/dynamic handling > should log fetch metrics to the diagnostics directory

  • turbopack production · DD

app-dir static/dynamic handling > should have correct cache tags for prerendered path

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving/app-page

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving/route-handler

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving-edge/app-page

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving-edge/route-handler

  • turbopack production · DD

app-dir static/dynamic handling > should correctly handle statusCode with notFound + ISR

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for fetchCache = default-cache

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly when accessing search params opts into dynamic rendering

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for fetchCache = force-cache

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for cache: "force-cache" and "revalidate"

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for cache: no-store

  • turbopack production · DD

app-dir static/dynamic handling > should not error with dynamic server usage with force-static

  • turbopack production · DD

app-dir static/dynamic handling > should produce response with url from fetch

  • turbopack production · DD

app-dir static/dynamic handling > should properly error when dynamic = "error" page uses dynamic

  • turbopack production · DD

app-dir static/dynamic handling > should skip cache in draft mode

  • turbopack production · DD

app-dir static/dynamic handling > should handle partial-gen-params with default dynamicParams correctly

  • turbopack production · DD

app-dir static/dynamic handling > should handle partial-gen-params with layout dynamicParams = false correctly

  • turbopack production · DD

app-dir static/dynamic handling > should handle partial-gen-params with page dynamicParams = false correctly

  • turbopack production · DD

app-dir static/dynamic handling > should honor fetch cache correctly

  • turbopack production · DD

app-dir static/dynamic handling > should honor fetch cache correctly (edge)

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with authorization header and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should skip fetch cache when an authorization header is present after dynamic usage

  • turbopack production · DD

app-dir static/dynamic handling > should skip fetch cache when accessing request properties

  • turbopack production · DD

app-dir static/dynamic handling > should not cache correctly with POST method request init

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with post method and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with post method and revalidate edge

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with POST method and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with cookie header and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with utf8 encoding

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with utf8 encoding edge

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly handle JSON body

  • turbopack production · DD

app-dir static/dynamic handling > should not throw Dynamic Server Usage error when using generateStaticParams with draftMode

  • turbopack production · DD

app-dir static/dynamic handling > should force SSR correctly for headers usage

  • turbopack production · DD

app-dir static/dynamic handling > should allow dynamic routes to access cookies

  • turbopack production · DD

app-dir static/dynamic handling > should not error with generateStaticParams and dynamic data

  • turbopack production · DD

app-dir static/dynamic handling > should not error with force-dynamic and catch-all routes

  • turbopack production · DD

app-dir static/dynamic handling > should not error with generateStaticParams and authed data on revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should work with forced dynamic path

  • turbopack production · DD

app-dir static/dynamic handling > should work with dynamic path no generateStaticParams

  • turbopack production · DD

app-dir static/dynamic handling > should handle dynamicParams: true correctly

  • turbopack production · DD

app-dir static/dynamic handling > should ssr dynamically when detected automatically with fetch cache option

  • turbopack production · DD

app-dir static/dynamic handling > should render not found pages correctly and fallback to the default one

  • turbopack production · DD

app-dir static/dynamic handling > should ssr dynamically when forced via config

  • turbopack production · DD

app-dir static/dynamic handling > useSearchParams > client > should bailout to client rendering - with suspense boundary

  • turbopack production · DD

app-dir static/dynamic handling > useSearchParams > client > should have values from canonical url on rewrite

  • turbopack production · DD

app-dir static/dynamic handling > useSearchParams > server response > should bailout to client rendering - with suspense boundary

  • turbopack production · DD

app-dir static/dynamic handling > usePathname > should have the correct values

  • turbopack production · DD

app-dir static/dynamic handling > usePathname > should have values from canonical url on rewrite

  • turbopack production · DD

app-dir static/dynamic handling > unstable_noStore > should opt-out of static optimization

  • turbopack production · DD

app-dir static/dynamic handling > unstable_noStore > should not opt-out of static optimization when used in next/cache

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should retrieve the same value on second request

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should bypass cache in draft mode

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not cache new result in draft mode

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should be able to read the draft mode status

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not error when retrieving the value undefined

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not error when calling a fetch no-store

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not error when calling a fetch no-cache

  • turbopack production · DD

app-dir static/dynamic handling > should keep querystring on static page

  • turbopack production · DD

app-dir static/dynamic handling > should have logs from cache-handler

  • turbopack production · DD

app-dir static/dynamic handling > Incremental cache limits > should cache large data when using custom cache handler and force-cache mode

  • turbopack production · DD

app-dir static/dynamic handling > should build dynamic param with edge runtime correctly

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > should throw error when updateTag is called in route handler

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > should successfully update tag when called from server action

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > revalidateTag work with max profile in server actions

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > should show deprecation warning for revalidateTag without second argument

  • turbopack production · DD
test/e2e/app-dir/app-static/app-static.test.ts (105)

app-dir static/dynamic handling > should respond correctly for dynamic route with dynamicParams false in layout

  • turbopack production · DD

app-dir static/dynamic handling > should respond correctly for partially dynamic route with dynamicParams false in layout

  • turbopack production · DD

app-dir static/dynamic handling > should use auto no cache when no fetch config

  • turbopack production · DD

app-dir static/dynamic handling > should correctly handle "default" cache statuses

  • turbopack production · DD

app-dir static/dynamic handling > should still cache even though the W3C trace context headers traceparent and tracestate were different

  • turbopack production · DD

app-dir static/dynamic handling > should warn for too many cache tags

  • turbopack production · DD

app-dir static/dynamic handling > should propagate unstable_cache tags correctly

  • turbopack production · DD

app-dir static/dynamic handling > should infer a fetchCache of force-no-store when force-dynamic is used

  • turbopack production · DD

app-dir static/dynamic handling > should infer a fetch cache of "force-cache" when force-dynamic is used on a fetch with revalidate

  • turbopack production · DD

app-dir static/dynamic handling > force-dynamic should supercede a "default" cache value

  • turbopack production · DD

app-dir static/dynamic handling > fetchCache config should supercede dynamic config when force-dynamic is used

  • turbopack production · DD

app-dir static/dynamic handling > fetch cache should supercede dynamic config when force-dynamic is used

  • turbopack production · DD

app-dir static/dynamic handling > should honor force-static with fetch cache: no-store correctly

  • turbopack production · DD

app-dir static/dynamic handling > should correctly include headers instance in cache key

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/unstable-cache-node

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/unstable-cache-edge

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/api/unstable-cache-node

  • turbopack production · DD

app-dir static/dynamic handling > unstable-cache should work in pages/api/unstable-cache-edge

  • turbopack production · DD

app-dir static/dynamic handling > should not have cache tags header for non-minimal mode

  • turbopack production · DD

app-dir static/dynamic handling > should correctly skip caching POST fetch for POST handler

  • turbopack production · DD

app-dir static/dynamic handling > it should revalidate tag correctly with edge route handler

  • turbopack production · DD

app-dir static/dynamic handling > it should revalidate tag correctly with node route handler

  • turbopack production · DD

app-dir static/dynamic handling > should not revalidate / when revalidate is not used

  • turbopack production · DD

app-dir static/dynamic handling > it should revalidate correctly with edge route handler

  • turbopack production · DD

app-dir static/dynamic handling > it should revalidate correctly with node route handler

  • turbopack production · DD

app-dir static/dynamic handling > should revalidate all fetches during on-demand revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should correctly handle fetchCache = "force-no-store"

  • turbopack production · DD

app-dir static/dynamic handling > should revalidate correctly with config and fetch revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should not cache non-ok statusCode

  • turbopack production · DD

app-dir static/dynamic handling > should not encode dynamic parameters as search parameters in RSC data

  • turbopack production · DD

app-dir static/dynamic handling > should output HTML/RSC files for static paths

  • turbopack production · DD

app-dir static/dynamic handling > should have correct prerender-manifest entries

  • turbopack production · DD

app-dir static/dynamic handling > should output debug info for static bailouts

  • turbopack production · DD

app-dir static/dynamic handling > should log fetch metrics to the diagnostics directory

  • turbopack production · DD

app-dir static/dynamic handling > should have correct cache tags for prerendered path

  • turbopack production · DD

app-dir static/dynamic handling > should correctly error and not update cache for ISR

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving/app-page

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving/route-handler

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving-edge/app-page

  • turbopack production · DD

app-dir static/dynamic handling > should stream properly for /stale-cache-serving-edge/route-handler

  • turbopack production · DD

app-dir static/dynamic handling > should correctly handle statusCode with notFound + ISR

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for fetchCache = default-cache

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly when accessing search params opts into dynamic rendering

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for fetchCache = force-cache

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for cache: "force-cache" and "revalidate"

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly for cache: no-store

  • turbopack production · DD

app-dir static/dynamic handling > should not error with dynamic server usage with force-static

  • turbopack production · DD

app-dir static/dynamic handling > should produce response with url from fetch

  • turbopack production · DD

app-dir static/dynamic handling > should properly error when dynamic = "error" page uses dynamic

  • turbopack production · DD

app-dir static/dynamic handling > should skip cache in draft mode

  • turbopack production · DD

app-dir static/dynamic handling > should handle partial-gen-params with default dynamicParams correctly

  • turbopack production · DD

app-dir static/dynamic handling > should handle partial-gen-params with layout dynamicParams = false correctly

  • turbopack production · DD

app-dir static/dynamic handling > should handle partial-gen-params with page dynamicParams = false correctly

  • turbopack production · DD

app-dir static/dynamic handling > should honor fetch cache in generateStaticParams

  • turbopack production · DD

app-dir static/dynamic handling > should honor fetch cache correctly

  • turbopack production · DD

app-dir static/dynamic handling > should honor fetch cache correctly (edge)

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with authorization header and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should skip fetch cache when an authorization header is present after dynamic usage

  • turbopack production · DD

app-dir static/dynamic handling > should skip fetch cache when accessing request properties

  • turbopack production · DD

app-dir static/dynamic handling > should not cache correctly with POST method request init

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with post method and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with post method and revalidate edge

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with POST method and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with cookie header and revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with utf8 encoding

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly with utf8 encoding edge

  • turbopack production · DD

app-dir static/dynamic handling > should cache correctly handle JSON body

  • turbopack production · DD

app-dir static/dynamic handling > should not throw Dynamic Server Usage error when using generateStaticParams with draftMode

  • turbopack production · DD

app-dir static/dynamic handling > should force SSR correctly for headers usage

  • turbopack production · DD

app-dir static/dynamic handling > should allow dynamic routes to access cookies

  • turbopack production · DD

app-dir static/dynamic handling > should not error with generateStaticParams and dynamic data

  • turbopack production · DD

app-dir static/dynamic handling > should not error with force-dynamic and catch-all routes

  • turbopack production · DD

app-dir static/dynamic handling > should not error with generateStaticParams and authed data on revalidate

  • turbopack production · DD

app-dir static/dynamic handling > should not filter out catch-all params with repeated segments in generateStaticParams

  • turbopack production · DD

app-dir static/dynamic handling > should honor dynamic = "force-static" correctly

  • turbopack production · DD

app-dir static/dynamic handling > should honor dynamic = "force-static" correctly (lazy)

  • turbopack production · DD

app-dir static/dynamic handling > should handle dynamicParams: false correctly

  • turbopack production · DD

app-dir static/dynamic handling > should work with forced dynamic path

  • turbopack production · DD

app-dir static/dynamic handling > should work with dynamic path no generateStaticParams

  • turbopack production · DD

app-dir static/dynamic handling > should handle dynamicParams: true correctly

  • turbopack production · DD

app-dir static/dynamic handling > should navigate to static path correctly

  • turbopack production · DD

app-dir static/dynamic handling > should ssr dynamically when detected automatically with fetch cache option

  • turbopack production · DD

app-dir static/dynamic handling > should render not found pages correctly and fallback to the default one

  • turbopack production · DD

app-dir static/dynamic handling > should ssr dynamically when forced via config

  • turbopack production · DD

app-dir static/dynamic handling > useSearchParams > client > should bailout to client rendering - with suspense boundary

  • turbopack production · DD

app-dir static/dynamic handling > useSearchParams > client > should have values from canonical url on rewrite

  • turbopack production · DD

app-dir static/dynamic handling > useSearchParams > server response > should bailout to client rendering - with suspense boundary

  • turbopack production · DD

app-dir static/dynamic handling > usePathname > should have the correct values

  • turbopack production · DD

app-dir static/dynamic handling > usePathname > should have values from canonical url on rewrite

  • turbopack production · DD

app-dir static/dynamic handling > unstable_noStore > should opt-out of static optimization

  • turbopack production · DD

app-dir static/dynamic handling > unstable_noStore > should not opt-out of static optimization when used in next/cache

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should retrieve the same value on second request

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should bypass cache in draft mode

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not cache new result in draft mode

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should be able to read the draft mode status

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not error when retrieving the value undefined

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not error when calling a fetch no-store

  • turbopack production · DD

app-dir static/dynamic handling > unstable_cache > should not error when calling a fetch no-cache

  • turbopack production · DD

app-dir static/dynamic handling > should keep querystring on static page

  • turbopack production · DD

app-dir static/dynamic handling > Incremental cache limits > should load data only at build time even if response data size is greater than 2MB and FetchCache is possible

  • turbopack production · DD

app-dir static/dynamic handling > should build dynamic param with edge runtime correctly

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > should throw error when updateTag is called in route handler

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > should successfully update tag when called from server action

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > revalidateTag work with max profile in server actions

  • turbopack production · DD

app-dir static/dynamic handling > updateTag/revalidateTag > should show deprecation warning for revalidateTag without second argument

  • turbopack production · DD
test/e2e/app-dir/app/experimental-compile.test.ts (113)

app dir - basic > should have correct cache-control for SSR routes

  • turbopack production · DD

app dir - basic > should provide query for getStaticProps page correctly

  • turbopack production · DD

app dir - basic > should contain framework.json

  • turbopack production · DD

app dir - basic > outputs correct build-diagnostics.json

  • turbopack production · DD

app dir - basic > should work for catch-all edge page

  • turbopack production · DD

app dir - basic > should return normalized dynamic route params for catch-all edge page

  • turbopack production · DD

app dir - basic > should have correct searchParams and params (server)

  • turbopack production · DD

app dir - basic > should have correct searchParams and params (client)

  • turbopack production · DD

app dir - basic > should successfully detect app route during prefetch

  • turbopack production · DD

app dir - basic > should encode chunk path correctly

  • turbopack production · DD

app dir - basic > should match redirects in pages correctly $path

  • turbopack production · DD
  • turbopack production · DD
  • turbopack production · DD
  • turbopack production · DD
  • turbopack production · DD
  • turbopack production · DD

app dir - basic > should not apply client router filter on shallow

  • turbopack production · DD

app dir - basic > should not share edge workers

  • turbopack production · DD

app dir - basic > should generate build traces correctly

  • turbopack production · DD

app dir - basic > should use text/x-component for flight

  • turbopack production · DD

app dir - basic > should use text/x-component for flight with edge runtime

  • turbopack production · DD

app dir - basic > should return the vary header from edge runtime

  • turbopack production · DD

app dir - basic > should return the vary header from pages for flight requests

  • turbopack production · DD

app dir - basic > should pass props from getServerSideProps in root layout

  • turbopack production · DD

app dir - basic > should serve from pages

  • turbopack production · DD

app dir - basic > should serve dynamic route from pages

  • turbopack production · DD

app dir - basic > should serve from public

  • turbopack production · DD

app dir - basic > should serve from app

  • turbopack production · DD

app dir - basic > should ensure the suffix is at the end of the stream

  • turbopack production · DD

app dir - basic > should serve /index as separate page

  • turbopack production · DD

app dir - basic > should serve polyfills for browsers that do not support modules

  • turbopack production · DD

app dir - basic > should include layouts when no direct parent layout

  • turbopack production · DD

app dir - basic > should use new root layout when provided

  • turbopack production · DD

app dir - basic > should not create new root layout when nested (optional)

  • turbopack production · DD

app dir - basic > should include parent document when no direct parent layout

  • turbopack production · DD

app dir - basic > should not include parent when not in parent directory

  • turbopack production · DD

app dir - basic > should serve nested parent

  • turbopack production · DD

app dir - basic > should serve dynamic parameter

  • turbopack production · DD

app dir - basic > should serve page as a segment name correctly

  • turbopack production · DD

app dir - basic > should include document html and body

  • turbopack production · DD

app dir - basic > should not serve when layout is provided but no folder index

  • turbopack production · DD

app dir - basic > rewrites > should support rewrites on initial load

  • turbopack production · DD

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

  • turbopack production · DD

app dir - basic > rewrites > should support rewrites on client-side navigation

  • turbopack production · DD

app dir - basic > should not rerender layout when navigating between routes in the same layout

  • turbopack production · DD

app dir - basic > should handle hash in initial url

  • turbopack production · DD

app dir - basic > > should hard push

  • turbopack production · DD

app dir - basic > > should hard replace

  • turbopack production · DD

app dir - basic > > should soft push

  • turbopack production · DD

app dir - basic > > should soft replace

  • turbopack production · DD

app dir - basic > > should be soft for back navigation

  • turbopack production · DD

app dir - basic > > should be soft for forward navigation

  • turbopack production · DD

app dir - basic > > should allow linking from app page to pages page

  • turbopack production · DD

app dir - basic > > should navigate to pages dynamic route from pages page if it overlaps with an app page

  • turbopack production · DD

app dir - basic > > should push to external url

  • turbopack production · DD

app dir - basic > > should replace to external url

  • turbopack production · DD

app dir - basic > server components > should not serve .server.js as a path

  • turbopack production · DD

app dir - basic > server components > should not serve .client.js as a path

  • turbopack production · DD

app dir - basic > server components > should serve shared component

  • turbopack production · DD

app dir - basic > server components > dynamic routes > should only pass params that apply to the layout

  • turbopack production · DD

app dir - basic > server components > catch-all routes > should handle optional segments

  • turbopack production · DD

app dir - basic > server components > catch-all routes > should handle optional segments root

  • turbopack production · DD

app dir - basic > server components > catch-all routes > should handle optional catch-all segments link

  • turbopack production · DD

app dir - basic > server components > catch-all routes > should handle required segments

  • turbopack production · DD

app dir - basic > server components > catch-all routes > should handle required segments root as not found

  • turbopack production · DD

app dir - basic > server components > catch-all routes > should handle catch-all segments link

  • turbopack production · DD

app dir - basic > server components > should serve client component > should serve server-side

  • turbopack production · DD

app dir - basic > server components > should serve client component > should serve client-side

  • turbopack production · DD

app dir - basic > server components > should include client component layout with server component route > should include it server-side

  • turbopack production · DD

app dir - basic > server components > should include client component layout with server component route > should include it client-side

  • turbopack production · DD

app dir - basic > server components > Loading > should render loading.js in initial html for slow page

  • turbopack production · DD

app dir - basic > server components > Loading > should render loading.js in browser for slow page

  • turbopack production · DD

app dir - basic > server components > Loading > should render loading.js in initial html for slow layout

  • turbopack production · DD

app dir - basic > server components > Loading > should render loading.js in browser for slow layout

  • turbopack production · DD

app dir - basic > server components > Loading > should render loading.js in initial html for slow layout and page

  • turbopack production · DD

app dir - basic > server components > Loading > should render loading.js in browser for slow layout and page

  • turbopack production · DD

app dir - basic > server components > middleware > should strip internal query parameters from requests to middleware for rewrite

  • turbopack production · DD

app dir - basic > server components > middleware > should strip internal query parameters from requests to middleware for redirect

  • turbopack production · DD

app dir - basic > server components > next/router > should support router.back and router.forward

  • turbopack production · DD

app dir - basic > server components > client components > should have consistent query and params handling

  • turbopack production · DD

app dir - basic > searchParams prop > client component > should have the correct search params

  • turbopack production · DD

app dir - basic > searchParams prop > client component > should have the correct search params on rewrite

  • turbopack production · DD

app dir - basic > searchParams prop > client component > should have the correct search params on middleware rewrite

  • turbopack production · DD

app dir - basic > searchParams prop > server component > should have the correct search params

  • turbopack production · DD

app dir - basic > searchParams prop > server component > should have the correct search params on rewrite

  • turbopack production · DD

app dir - basic > searchParams prop > server component > should have the correct search params on middleware rewrite

  • turbopack production · DD

app dir - basic > template component > should render the template that holds state in a client component and reset on navigation

  • turbopack production · DD

app dir - basic > template component > should render the template that is a server component and rerender on navigation

  • turbopack production · DD

app dir - basic > known bugs > should support React cache > server component

  • turbopack production · DD

app dir - basic > known bugs > should support React cache > server component client-navigation

  • turbopack production · DD

app dir - basic > known bugs > should support React cache > client component

  • turbopack production · DD

app dir - basic > known bugs > should support React cache > client component client-navigation

  • turbopack production · DD

app dir - basic > known bugs > should support React cache > middleware overriding headers

  • turbopack production · DD

app dir - basic > known bugs > should support React fetch instrumentation > server component

  • turbopack production · DD

app dir - basic > known bugs > should support React fetch instrumentation > server component client-navigation

  • turbopack production · DD

app dir - basic > known bugs > should not share flight data between requests

  • turbopack production · DD

app dir - basic > known bugs > should handle router.refresh without resetting state

  • turbopack production · DD

app dir - basic > known bugs > should handle as on next/link

  • turbopack production · DD

app dir - basic > known bugs > should handle next/link back to initially loaded page

  • turbopack production · DD

app dir - basic > known bugs > should not do additional pushState when already on the page

  • turbopack production · DD

app dir - basic > next/script > should support next/script and render in correct order

  • turbopack production · DD

app dir - basic > next/script > should pass on extra props for beforeInteractive scripts with a src prop

  • turbopack production · DD

app dir - basic > next/script > should pass on extra props for beforeInteractive scripts without a src prop

  • turbopack production · DD

app dir - basic > next/script > should insert preload tags for beforeInteractive and afterInteractive scripts

  • turbopack production · DD

app dir - basic > next/script > should load stylesheets for next/scripts

  • turbopack production · DD

app dir - basic > next/script > should pass nonce

  • turbopack production · DD

app dir - basic > next/script > should pass manual nonce

  • turbopack production · DD

app dir - basic > next/script > should pass manual nonce pages

  • turbopack production · DD

app dir - basic > next/script > should pass nonce when using next/font

  • turbopack production · DD

app dir - basic > data fetch with response over 16KB with chunked encoding > should load page when fetching a large amount of data

  • turbopack production · DD

app dir - basic > bootstrap scripts > should only bootstrap with one script, prinitializing the rest

  • turbopack production · DD

app dir - basic > bootstrap scripts > should successfully bootstrap even when using CSP

  • turbopack production · DD

app dir - basic > should run generate command correctly

  • turbopack production · DD
test/e2e/app-dir/app/standalone.test.ts (2)

output: standalone with app dir > should handle trace files correctly for route groups (nodejs only)

  • turbopack production · DD

output: standalone with app dir > should work correctly with output standalone

  • turbopack production · DD
...r/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (1)

runtime prefetching > in a private cache > can completely prefetch a page that uses cookies and no uncached IO

  • prod · DD
test/integration/app-document-remove-hmr/test/index.test.ts (4)

_app removal HMR > should HMR when _app is removed

  • turbopack production integration · DD
  • turbopack development integration · DD

_app removal HMR > should HMR when _document is removed

  • turbopack production integration · DD
  • turbopack development integration · DD
test/integration/config-output-export/test/index.test.ts (10)

config-output-export > should work with getStaticProps and without revalidate

  • turbopack production integration · DD
  • turbopack development integration · DD

config-output-export > should error with getServerSideProps without fallback

  • turbopack production integration · DD
  • turbopack development integration · DD

config-output-export > should error with getStaticPaths and fallback true

  • turbopack production integration · DD
  • turbopack development integration · DD

config-output-export > should error with getStaticPaths and fallback blocking

  • turbopack production integration · DD
  • turbopack development integration · DD

config-output-export > should work with getStaticPaths and fallback false

  • turbopack production integration · DD
  • turbopack development integration · DD
test/integration/env-config/test/index.test.ts (8)

Env Config > development mode > with hot reload > should trigger HMR correctly when NEXT_PUBLIC_ env is changed

  • turbopack development integration · DD

Env Config > test environment > should have process environment override .env

  • turbopack development integration · DD

Env Config > test environment > should provide global env to next.config.js

  • turbopack development integration · DD

Env Config > test environment > should inline global values during build

  • turbopack development integration · DD

Env Config > test environment > should provide env for SSG

  • turbopack development integration · DD

Env Config > test environment > should provide env correctly for SSR

  • turbopack development integration · DD

Env Config > test environment > should provide env correctly for API routes

  • turbopack development integration · DD

Env Config > test environment > should load env from .env

  • turbopack development integration · DD
test/integration/jsconfig-baseurl/test/index.test.ts (1)

jsconfig.json baseurl > default behavior > should have correct module not found error

  • turbopack development integration · DD
test/integration/middleware-dev-update/test/index.test.ts (3)

Middleware development errors > when middleware is added > sends response correctly

  • turbopack development integration · DD
  • turbopack production integration · DD

Middleware development errors > when matcher is added > sends response correctly

  • turbopack production integration · DD
...egration/non-standard-node-env-warning/test/index.test.ts (2)

Non-Standard NODE_ENV > should not show the warning with NODE_ENV set to valid value (custom server)

  • turbopack production integration · DD

Non-Standard NODE_ENV > should show the warning with NODE_ENV set to invalid value (custom server)

  • turbopack production integration · DD
test/integration/typescript-hmr/test/index.test.ts (4)

TypeScript HMR > delete a page and add it back > should detect the changes to typescript pages and display it

  • turbopack development integration · DD
  • turbopack production integration · DD

TypeScript HMR > should ignore type errors in development

  • turbopack development integration · DD
  • turbopack production integration · DD

@codspeed-hq
Copy link

codspeed-hq bot commented Jan 5, 2026

CodSpeed Performance Report

Merging this PR will not alter performance

Comparing sokra/task-prio (2640342) with canary (8e5146f)

Summary

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1

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.

@graphite-app
Copy link
Contributor

graphite-app bot commented Jan 15, 2026

Merge activity

  • Jan 15, 6:06 PM UTC: This pull request can not be added to the Graphite merge queue. Please try rebasing and resubmitting to merge when ready.
  • Jan 15, 6:06 PM UTC: Graphite disabled "merge when ready" on this PR due to: a merge conflict with the target branch; resolve the conflict and try again..
  • Jan 15, 7:18 PM UTC: @sokra merged this pull request with Graphite.

@sokra sokra merged commit 125b7d8 into canary Jan 15, 2026
167 of 175 checks passed
@sokra sokra deleted the sokra/task-prio branch January 15, 2026 19:18
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. Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants