Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Turbopack: Upgrade image crate#85084

Merged
sokra merged 4 commits intocanaryfrom
10-19-turbopack_upgrade_image_crate
Nov 3, 2025
Merged

Turbopack: Upgrade image crate#85084
sokra merged 4 commits intocanaryfrom
10-19-turbopack_upgrade_image_crate

Conversation

@timneutkens
Copy link
Member

@timneutkenstimneutkens commentedOct 20, 2025
edited
Loading

What?

Upgrade the image crate which includes some bugfixes for bmp files.

@ijjkijjk added created-by: Turbopack teamPRs by the Turbopack team. TurbopackRelated to Turbopack with Next.js. labelsOct 20, 2025
@timneutkensGraphite App
Copy link
MemberAuthor

This stack of pull requests is managed byGraphite. Learn more aboutstacking.

@timneutkenstimneutkens marked this pull request as ready for reviewOctober 20, 2025 03:56
@ijjk
Copy link
Member

ijjk commentedOct 20, 2025
edited
Loading

Stats from current PR

Default Build (Increase detected⚠️)
General
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
buildDuration28.6s24sN/A
buildDurationCached23.4s19.7sN/A
nodeModulesSize453 MB453 MB
nextStartRea..uration (ms)645ms689msN/A
Client Bundles (main, webpack) Overall increase⚠️
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
436-HASH.js gzip5.32 kB5.32 kBN/A
4779.HASH.js gzip169 B169 B
9760-HASH.js gzip54.4 kB54.7 kB⚠️ +308 B
c57d0559-HASH.js gzip62.1 kB62.1 kBN/A
framework-HASH.js gzip59.8 kB59.8 kB
main-app-HASH.js gzip252 B256 BN/A
main-HASH.js gzip39.8 kB39.9 kBN/A
webpack-HASH.js gzip1.69 kB1.69 kB
Overall change116 kB116 kB⚠️ +308 B
Legacy Client Bundles (polyfills)
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Overall change39.4 kB39.4 kB
Client Pages
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
_app-HASH.js gzip193 B194 BN/A
_error-HASH.js gzip182 B182 B
css-HASH.js gzip334 B334 B
dynamic-HASH.js gzip1.81 kB1.81 kBN/A
edge-ssr-HASH.js gzip255 B254 BN/A
head-HASH.js gzip350 B351 BN/A
hooks-HASH.js gzip384 B384 B
image-HASH.js gzip4.78 kB4.77 kBN/A
index-HASH.js gzip260 B259 BN/A
link-HASH.js gzip2.5 kB2.5 kBN/A
routerDirect..HASH.js gzip316 B320 BN/A
script-HASH.js gzip388 B388 B
withRouter-HASH.js gzip316 B314 BN/A
1afbb74e6ecf..834.css gzip106 B106 B
Overall change1.39 kB1.39 kB
Client Build Manifests
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
_buildManifest.js gzip718 B720 BN/A
Overall change0 B0 B
Rendered Page Sizes
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
index.html gzip523 B522 BN/A
link.html gzip537 B538 BN/A
withRouter.html gzip521 B519 BN/A
Overall change0 B0 B
Edge SSR bundle Size Overall increase⚠️
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
edge-ssr.js gzip128 kB128 kBN/A
page.js gzip255 kB257 kB⚠️ +1.72 kB
Overall change255 kB257 kB⚠️ +1.72 kB
Middleware size Overall increase⚠️
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
middleware-b..fest.js gzip634 B639 BN/A
middleware-r..fest.js gzip156 B156 B
middleware.js gzip32.7 kB33 kB⚠️ +249 B
edge-runtime..pack.js gzip846 B846 B
Overall change33.7 kB34 kB⚠️ +249 B
Next Runtimes
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
app-page-exp...dev.js gzip295 kB295 kBN/A
app-page-exp..prod.js gzip155 kB155 kB
app-page-tur...dev.js gzip295 kB295 kB
app-page-tur..prod.js gzip155 kB155 kB
app-page-tur...dev.js gzip291 kB291 kBN/A
app-page-tur..prod.js gzip152 kB152 kB
app-page.run...dev.js gzip291 kB291 kBN/A
app-page.run..prod.js gzip152 kB152 kB
app-route-ex...dev.js gzip70.8 kB70.8 kB
app-route-ex..prod.js gzip49.4 kB49.4 kB
app-route-tu...dev.js gzip70.8 kB70.8 kB
app-route-tu..prod.js gzip49.4 kB49.4 kB
app-route-tu...dev.js gzip70.4 kB70.4 kB
app-route-tu..prod.js gzip49.1 kB49.1 kB
app-route.ru...dev.js gzip70.4 kB70.4 kB
app-route.ru..prod.js gzip49.1 kB49.1 kB
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip328 B328 B
dist_client_...dev.js gzip320 B320 B
dist_client_...dev.js gzip318 B318 B
pages-api-tu...dev.js gzip43.3 kB43.3 kB
pages-api-tu..prod.js gzip33.2 kB33.2 kB
pages-api.ru...dev.js gzip43.3 kB43.3 kB
pages-api.ru..prod.js gzip33.1 kB33.1 kB
pages-turbo....dev.js gzip52.8 kB52.8 kB
pages-turbo...prod.js gzip40.1 kB40.1 kB
pages.runtim...dev.js gzip52.8 kB52.8 kB
pages.runtim..prod.js gzip40 kB40 kB
server.runti..prod.js gzip78.9 kB78.9 kB
Overall change1.81 MB1.81 MB
build cache
vercel/next.js canaryvercel/next.js 10-19-turbopack_upgrade_image_crateChange
0.pack gzip3.25 MB3.25 MBN/A
index.pack gzip96.6 kB94.2 kBN/A
Overall change0 B0 B
Diff details
Diff forpage.js

Diff too large to display

Diff formiddleware.js

Diff too large to display

Diff foredge-ssr.js

Diff too large to display

Diff fordynamic-HASH.js
@@ -1,7 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [2291],   {-    /***/ 1033: /***/ (+    /***/ 431: /***/ (       __unused_webpack_module,       __unused_webpack_exports,       __webpack_require__@@ -9,7 +9,7 @@       (window.__NEXT_P = window.__NEXT_P || []).push([         "/dynamic",         function () {-          return __webpack_require__(6490);+          return __webpack_require__(8084);         },       ]);       if (false) {@@ -18,7 +18,7 @@       /***/     },-    /***/ 5323: /***/ (+    /***/ 2699: /***/ (       __unused_webpack_module,       exports,       __webpack_require__@@ -60,7 +60,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE       const _react = /*#__PURE__*/ _interop_require_default._(         __webpack_require__(2223)       );-      const _loadablecontextsharedruntime = __webpack_require__(9289);+      const _loadablecontextsharedruntime = __webpack_require__(3785);       function resolve(obj) {         return obj && obj.default ? obj.default : obj;       }@@ -293,73 +293,34 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE       /***/     },-    /***/ 6490: /***/ (+    /***/ 3785: /***/ (       __unused_webpack_module,-      __webpack_exports__,+      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 */+      /* __next_internal_client_entry_do_not_use__  cjs */+      Object.defineProperty(exports, "__esModule", {+        value: true,       });-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =-        __webpack_require__(1503);-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =-        __webpack_require__(7320);-      /* 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() */ 4779)-            .then(__webpack_require__.bind(__webpack_require__, 4779))-            .then((mod) => mod.Hello),-        {-          loadableGenerated: {-            webpack: () => [/*require.resolve*/ 4779],-          },-        }+      Object.defineProperty(exports, "LoadableContext", {+        enumerable: true,+        get: function () {+          return LoadableContext;+        },+      });+      const _interop_require_default = __webpack_require__(1532);+      const _react = /*#__PURE__*/ _interop_require_default._(+        __webpack_require__(2223)       );-      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;--      /***/-    },--    /***/ 7320: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(7340);+      const LoadableContext = _react.default.createContext(null);+      if (false) {+      } //# sourceMappingURL=loadable-context.shared-runtime.js.map        /***/     },-    /***/ 7340: /***/ (module, exports, __webpack_require__) => {+    /***/ 6828: /***/ (module, exports, __webpack_require__) => {       "use strict";        Object.defineProperty(exports, "__esModule", {@@ -392,7 +353,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE         __webpack_require__(2223)       );       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(-        __webpack_require__(5323)+        __webpack_require__(2699)       );       const isServerSide = "object" === "undefined";       // Normalize loader to return the module as form { default: Component } for `React.lazy`.@@ -492,29 +453,68 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE       /***/     },-    /***/ 9289: /***/ (+    /***/ 7514: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(6828);++      /***/+    },++    /***/ 8084: /***/ (       __unused_webpack_module,-      exports,+      __webpack_exports__,       __webpack_require__     ) => {       "use strict";-      /* __next_internal_client_entry_do_not_use__  cjs */-      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      Object.defineProperty(exports, "LoadableContext", {-        enumerable: true,-        get: function () {-          return LoadableContext;-        },+      __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 */       });-      const _interop_require_default = __webpack_require__(1532);-      const _react = /*#__PURE__*/ _interop_require_default._(-        __webpack_require__(2223)+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =+        __webpack_require__(1503);+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =+        __webpack_require__(7514);+      /* 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() */ 9573)+            .then(__webpack_require__.bind(__webpack_require__, 9573))+            .then((mod) => mod.Hello),+        {+          loadableGenerated: {+            webpack: () => [/*require.resolve*/ 9573],+          },+        }       );-      const LoadableContext = _react.default.createContext(null);-      if (false) {-      } //# sourceMappingURL=loadable-context.shared-runtime.js.map+      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;        /***/     },@@ -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__(1033)+      __webpack_exec__(431)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff foredge-ssr-HASH.js
@@ -1,24 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [676],   {-    /***/ 1819: /***/ (-      __unused_webpack_module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      (window.__NEXT_P = window.__NEXT_P || []).push([-        "/edge-ssr",-        function () {-          return __webpack_require__(7521);-        },-      ]);-      if (false) {-      }--      /***/-    },--    /***/ 7521: /***/ (+    /***/ 983: /***/ (       __unused_webpack_module,       __webpack_exports__,       __webpack_require__@@ -37,13 +20,30 @@        /***/     },++    /***/ 985: /***/ (+      __unused_webpack_module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      (window.__NEXT_P = window.__NEXT_P || []).push([+        "/edge-ssr",+        function () {+          return __webpack_require__(983);+        },+      ]);+      if (false) {+      }++      /***/+    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(1819)+      __webpack_exec__(985)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forhead-HASH.js
@@ -1,34 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [5350],   {-    /***/ 619: /***/ (-      __unused_webpack_module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      (window.__NEXT_P = window.__NEXT_P || []).push([-        "/head",-        function () {-          return __webpack_require__(9891);-        },-      ]);-      if (false) {-      }--      /***/-    },--    /***/ 7997: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(6705);--      /***/-    },--    /***/ 9891: /***/ (+    /***/ 1417: /***/ (       __unused_webpack_module,       __webpack_exports__,       __webpack_require__@@ -43,7 +16,7 @@       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =         __webpack_require__(1503);       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =-        __webpack_require__(7997);+        __webpack_require__(5171);       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =         /*#__PURE__*/ __webpack_require__.n(           next_head__WEBPACK_IMPORTED_MODULE_1__@@ -76,13 +49,40 @@        /***/     },++    /***/ 1937: /***/ (+      __unused_webpack_module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      (window.__NEXT_P = window.__NEXT_P || []).push([+        "/head",+        function () {+          return __webpack_require__(1417);+        },+      ]);+      if (false) {+      }++      /***/+    },++    /***/ 5171: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(7505);++      /***/+    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(619)+      __webpack_exec__(1937)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forhooks-HASH.js
@@ -1,24 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [9804],   {-    /***/ 1679: /***/ (-      __unused_webpack_module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      (window.__NEXT_P = window.__NEXT_P || []).push([-        "/hooks",-        function () {-          return __webpack_require__(4655);-        },-      ]);-      if (false) {-      }--      /***/-    },--    /***/ 4655: /***/ (+    /***/ 1598: /***/ (       __unused_webpack_module,       __webpack_exports__,       __webpack_require__@@ -76,13 +59,30 @@        /***/     },++    /***/ 3925: /***/ (+      __unused_webpack_module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      (window.__NEXT_P = window.__NEXT_P || []).push([+        "/hooks",+        function () {+          return __webpack_require__(1598);+        },+      ]);+      if (false) {+      }++      /***/+    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(1679)+      __webpack_exec__(3925)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forimage-HASH.js
@@ -1,24 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [2983],   {-    /***/ 797: /***/ (-      __unused_webpack_module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      (window.__NEXT_P = window.__NEXT_P || []).push([-        "/image",-        function () {-          return __webpack_require__(5999);-        },-      ]);-      if (false) {-      }--      /***/-    },--    /***/ 1713: /***/ (__unused_webpack_module, exports) => {+    /***/ 881: /***/ (__unused_webpack_module, exports) => {       "use strict";       /**        * A shared function, used on both client and server, to generate a SVG blur placeholder.@@ -58,7 +41,7 @@       /***/     },-    /***/ 2263: /***/ (module, exports, __webpack_require__) => {+    /***/ 1511: /***/ (module, exports, __webpack_require__) => {       "use strict";        Object.defineProperty(exports, "__esModule", {@@ -136,7 +119,137 @@       /***/     },-    /***/ 2728: /***/ (module, exports, __webpack_require__) => {+    /***/ 1744: /***/ (+      __unused_webpack_module,+      exports,+      __webpack_require__+    ) => {+      "use strict";++      Object.defineProperty(exports, "__esModule", {+        value: true,+      });+      Object.defineProperty(exports, "default", {+        enumerable: true,+        get: function () {+          return _default;+        },+      });+      const _findclosestquality = __webpack_require__(7054);+      function defaultLoader({ config, src, width, quality }) {+        if (+          src.startsWith("/") &&+          src.includes("?") &&+          config.localPatterns?.length === 1 &&+          config.localPatterns[0].pathname === "**" &&+          config.localPatterns[0].search === ""+        ) {+          throw Object.defineProperty(+            new Error(+              `Image with src "${src}" is using a query string which is not configured in images.localPatterns.` ++                `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`+            ),+            "__NEXT_ERROR_CODE",+            {+              value: "E871",+              enumerable: false,+              configurable: true,+            }+          );+        }+        if (false) {+        }+        const q = (0, _findclosestquality.findClosestQuality)(quality, config);+        return `${config.path}?url=${encodeURIComponent(+          src+        )}&w=${width}&q=${q}${+          src.startsWith("/_next/static/media/") && false ? 0 : ""+        }`;+      }+      // We use this to determine if the import is the default loader+      // or a custom loader defined by the user in next.config.js+      defaultLoader.__next_img_default = true;+      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map++      /***/+    },++    /***/ 2388: /***/ (+      __unused_webpack_module,+      __webpack_exports__,+      __webpack_require__+    ) => {+      "use strict";+      // ESM COMPAT FLAG+      __webpack_require__.r(__webpack_exports__);++      // EXPORTS+      __webpack_require__.d(__webpack_exports__, {+        __N_SSP: () => /* binding */ __N_SSP,+        default: () => /* binding */ pages_image,+      });++      // EXTERNAL MODULE: ./node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js+      var jsx_runtime = __webpack_require__(1503);+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/image.js+      var next_image = __webpack_require__(3866);+      var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png+      /* harmony default export */ const nextjs = {+        src: "/_next/static/media/nextjs.cae0b805.png",+        height: 1347,+        width: 1626,+        blurDataURL:+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEX////x8fH6+vrb29vo6Oh8o70bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAH0lEQVR4nGNgwARMjIyMjCAGCzMzMwsTRISJCcRABwAEcAAkLCQfgAAAAABJRU5ErkJggg==",+        blurWidth: 8,+        blurHeight: 7,+      }; // ./pages/image.js+      function ImagePage(props) {+        return /*#__PURE__*/ (0, jsx_runtime.jsxs)(jsx_runtime.Fragment, {+          children: [+            /*#__PURE__*/ (0, jsx_runtime.jsx)("h1", {+              children: "next/image example",+            }),+            /*#__PURE__*/ (0, jsx_runtime.jsx)(image_default(), {+              src: nextjs,+              placeholder: "blur",+            }),+          ],+        });+      }+      var __N_SSP = true;+      /* harmony default export */ const pages_image = ImagePage;++      /***/+    },++    /***/ 3866: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(6888);++      /***/+    },++    /***/ 4483: /***/ (+      __unused_webpack_module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      (window.__NEXT_P = window.__NEXT_P || []).push([+        "/image",+        function () {+          return __webpack_require__(2388);+        },+      ]);+      if (false) {+      }++      /***/+    },++    /***/ 6600: /***/ (module, exports, __webpack_require__) => {       "use strict";       /* __next_internal_client_entry_do_not_use__  cjs */       Object.defineProperty(exports, "__esModule", {@@ -158,17 +271,17 @@         __webpack_require__(9507)       );       const _head = /*#__PURE__*/ _interop_require_default._(-        __webpack_require__(6705)+        __webpack_require__(7505)       );-      const _getimgprops = __webpack_require__(3556);-      const _imageconfig = __webpack_require__(3157);-      const _imageconfigcontextsharedruntime = __webpack_require__(9323);-      const _warnonce = __webpack_require__(6173);-      const _routercontextsharedruntime = __webpack_require__(6046);+      const _getimgprops = __webpack_require__(9588);+      const _imageconfig = __webpack_require__(2645);+      const _imageconfigcontextsharedruntime = __webpack_require__(5451);+      const _warnonce = __webpack_require__(7549);+      const _routercontextsharedruntime = __webpack_require__(5470);       const _imageloader = /*#__PURE__*/ _interop_require_default._(-        __webpack_require__(3744)+        __webpack_require__(1744)       );-      const _usemergedref = __webpack_require__(2263);+      const _usemergedref = __webpack_require__(1511);       // This is replaced by webpack define plugin       const configEnv = {         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],@@ -495,7 +608,96 @@       /***/     },-    /***/ 3556: /***/ (+    /***/ 6888: /***/ (+      __unused_webpack_module,+      exports,+      __webpack_require__+    ) => {+      "use strict";++      Object.defineProperty(exports, "__esModule", {+        value: true,+      });+      0 && 0;+      function _export(target, all) {+        for (var name in all)+          Object.defineProperty(target, name, {+            enumerable: true,+            get: all[name],+          });+      }+      _export(exports, {+        default: function () {+          return _default;+        },+        getImageProps: function () {+          return getImageProps;+        },+      });+      const _interop_require_default = __webpack_require__(1532);+      const _getimgprops = __webpack_require__(9588);+      const _imagecomponent = __webpack_require__(6600);+      const _imageloader = /*#__PURE__*/ _interop_require_default._(+        __webpack_require__(1744)+      );+      function getImageProps(imgProps) {+        const { props } = (0, _getimgprops.getImgProps)(imgProps, {+          defaultLoader: _imageloader.default,+          // This is replaced by webpack define plugin+          imgConf: {+            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],+            imageSizes: [32, 48, 64, 96, 128, 256, 384],+            qualities: [75],+            path: "/_next/image",+            loader: "default",+            dangerouslyAllowSVG: false,+            unoptimized: false,+          },+        });+        // Normally we don't care about undefined props because we pass to JSX,+        // but this exported function could be used by the end user for anything+        // so we delete undefined props to clean it up a little.+        for (const [key, value] of Object.entries(props)) {+          if (value === undefined) {+            delete props[key];+          }+        }+        return {+          props,+        };+      }+      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map++      /***/+    },++    /***/ 7054: /***/ (__unused_webpack_module, exports) => {+      "use strict";++      Object.defineProperty(exports, "__esModule", {+        value: true,+      });+      Object.defineProperty(exports, "findClosestQuality", {+        enumerable: true,+        get: function () {+          return findClosestQuality;+        },+      });+      function findClosestQuality(quality, config) {+        const q = quality || 75;+        if (!config?.qualities?.length) {+          return q;+        }+        return config.qualities.reduce(+          (prev, cur) => (Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev),+          0+        );+      } //# sourceMappingURL=find-closest-quality.js.map++      /***/+    },++    /***/ 9588: /***/ (       __unused_webpack_module,       exports,       __webpack_require__@@ -511,9 +713,9 @@           return getImgProps;         },       });-      const _warnonce = __webpack_require__(6173);-      const _imageblursvg = __webpack_require__(1713);-      const _imageconfig = __webpack_require__(3157);+      const _warnonce = __webpack_require__(7549);+      const _imageblursvg = __webpack_require__(881);+      const _imageconfig = __webpack_require__(2645);       const VALID_LOADING_VALUES =         /* unused pure expression or super */ null && [           "lazy",@@ -943,215 +1145,13 @@        /***/     },--    /***/ 3744: /***/ (-      __unused_webpack_module,-      exports,-      __webpack_require__-    ) => {-      "use strict";--      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      Object.defineProperty(exports, "default", {-        enumerable: true,-        get: function () {-          return _default;-        },-      });-      const _findclosestquality = __webpack_require__(8494);-      function defaultLoader({ config, src, width, quality }) {-        if (-          src.startsWith("/") &&-          src.includes("?") &&-          config.localPatterns?.length === 1 &&-          config.localPatterns[0].pathname === "**" &&-          config.localPatterns[0].search === ""-        ) {-          throw Object.defineProperty(-            new Error(-              `Image with src "${src}" is using a query string which is not configured in images.localPatterns.` +-                `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`-            ),-            "__NEXT_ERROR_CODE",-            {-              value: "E871",-              enumerable: false,-              configurable: true,-            }-          );-        }-        if (false) {-        }-        const q = (0, _findclosestquality.findClosestQuality)(quality, config);-        return `${config.path}?url=${encodeURIComponent(-          src-        )}&w=${width}&q=${q}${-          src.startsWith("/_next/static/media/") && false ? 0 : ""-        }`;-      }-      // We use this to determine if the import is the default loader-      // or a custom loader defined by the user in next.config.js-      defaultLoader.__next_img_default = true;-      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map--      /***/-    },--    /***/ 4292: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(7896);--      /***/-    },--    /***/ 5999: /***/ (-      __unused_webpack_module,-      __webpack_exports__,-      __webpack_require__-    ) => {-      "use strict";-      // ESM COMPAT FLAG-      __webpack_require__.r(__webpack_exports__);--      // EXPORTS-      __webpack_require__.d(__webpack_exports__, {-        __N_SSP: () => /* binding */ __N_SSP,-        default: () => /* binding */ pages_image,-      });--      // EXTERNAL MODULE: ./node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js-      var jsx_runtime = __webpack_require__(1503);-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/image.js-      var next_image = __webpack_require__(4292);-      var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png-      /* harmony default export */ const nextjs = {-        src: "/_next/static/media/nextjs.cae0b805.png",-        height: 1347,-        width: 1626,-        blurDataURL:-          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEX////x8fH6+vrb29vo6Oh8o70bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAH0lEQVR4nGNgwARMjIyMjCAGCzMzMwsTRISJCcRABwAEcAAkLCQfgAAAAABJRU5ErkJggg==",-        blurWidth: 8,-        blurHeight: 7,-      }; // ./pages/image.js-      function ImagePage(props) {-        return /*#__PURE__*/ (0, jsx_runtime.jsxs)(jsx_runtime.Fragment, {-          children: [-            /*#__PURE__*/ (0, jsx_runtime.jsx)("h1", {-              children: "next/image example",-            }),-            /*#__PURE__*/ (0, jsx_runtime.jsx)(image_default(), {-              src: nextjs,-              placeholder: "blur",-            }),-          ],-        });-      }-      var __N_SSP = true;-      /* harmony default export */ const pages_image = ImagePage;--      /***/-    },--    /***/ 7896: /***/ (-      __unused_webpack_module,-      exports,-      __webpack_require__-    ) => {-      "use strict";--      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      0 && 0;-      function _export(target, all) {-        for (var name in all)-          Object.defineProperty(target, name, {-            enumerable: true,-            get: all[name],-          });-      }-      _export(exports, {-        default: function () {-          return _default;-        },-        getImageProps: function () {-          return getImageProps;-        },-      });-      const _interop_require_default = __webpack_require__(1532);-      const _getimgprops = __webpack_require__(3556);-      const _imagecomponent = __webpack_require__(2728);-      const _imageloader = /*#__PURE__*/ _interop_require_default._(-        __webpack_require__(3744)-      );-      function getImageProps(imgProps) {-        const { props } = (0, _getimgprops.getImgProps)(imgProps, {-          defaultLoader: _imageloader.default,-          // This is replaced by webpack define plugin-          imgConf: {-            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],-            imageSizes: [32, 48, 64, 96, 128, 256, 384],-            qualities: [75],-            path: "/_next/image",-            loader: "default",-            dangerouslyAllowSVG: false,-            unoptimized: false,-          },-        });-        // Normally we don't care about undefined props because we pass to JSX,-        // but this exported function could be used by the end user for anything-        // so we delete undefined props to clean it up a little.-        for (const [key, value] of Object.entries(props)) {-          if (value === undefined) {-            delete props[key];-          }-        }-        return {-          props,-        };-      }-      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map--      /***/-    },--    /***/ 8494: /***/ (__unused_webpack_module, exports) => {-      "use strict";--      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      Object.defineProperty(exports, "findClosestQuality", {-        enumerable: true,-        get: function () {-          return findClosestQuality;-        },-      });-      function findClosestQuality(quality, config) {-        const q = quality || 75;-        if (!config?.qualities?.length) {-          return q;-        }-        return config.qualities.reduce(-          (prev, cur) => (Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev),-          0-        );-      } //# sourceMappingURL=find-closest-quality.js.map--      /***/-    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(797)+      __webpack_exec__(4483)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forlink-HASH.js
@@ -1,7 +1,338 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [4672],   {-    /***/ 69: /***/ (module, exports, __webpack_require__) => {+    /***/ 1511: /***/ (module, exports, __webpack_require__) => {+      "use strict";++      Object.defineProperty(exports, "__esModule", {+        value: true,+      });+      Object.defineProperty(exports, "useMergedRef", {+        enumerable: true,+        get: function () {+          return useMergedRef;+        },+      });+      const _react = __webpack_require__(2223);+      function useMergedRef(refA, refB) {+        const cleanupA = (0, _react.useRef)(null);+        const cleanupB = (0, _react.useRef)(null);+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs+        // (because it hasn't been updated for React 19)+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.+        return (0, _react.useCallback)(+          (current) => {+            if (current === null) {+              const cleanupFnA = cleanupA.current;+              if (cleanupFnA) {+                cleanupA.current = null;+                cleanupFnA();+              }+              const cleanupFnB = cleanupB.current;+              if (cleanupFnB) {+                cleanupB.current = null;+                cleanupFnB();+              }+            } else {+              if (refA) {+                cleanupA.current = applyRef(refA, current);+              }+              if (refB) {+                cleanupB.current = applyRef(refB, current);+              }+            }+          },+          [refA, refB]+        );+      }+      function applyRef(refA, current) {+        if (typeof refA === "function") {+          const cleanup = refA(current);+          if (typeof cleanup === "function") {+            return cleanup;+          } else {+            return () => refA(null);+          }+        } else {+          refA.current = current;+          return () => {+            refA.current = null;+          };+        }+      }+      if (+        (typeof exports.default === "function" ||+          (typeof exports.default === "object" && exports.default !== null)) &&+        typeof exports.default.__esModule === "undefined"+      ) {+        Object.defineProperty(exports.default, "__esModule", {+          value: true,+        });+        Object.assign(exports.default, exports);+        module.exports = exports.default;+      } //# sourceMappingURL=use-merged-ref.js.map++      /***/+    },++    /***/ 2025: /***/ (+      __unused_webpack_module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      (window.__NEXT_P = window.__NEXT_P || []).push([+        "/link",+        function () {+          return __webpack_require__(4591);+        },+      ]);+      if (false) {+      }++      /***/+    },++    /***/ 3267: /***/ (module, exports, __webpack_require__) => {+      "use strict";++      Object.defineProperty(exports, "__esModule", {+        value: true,+      });+      Object.defineProperty(exports, "getDomainLocale", {+        enumerable: true,+        get: function () {+          return getDomainLocale;+        },+      });+      const _normalizetrailingslash = __webpack_require__(2371);+      const basePath =+        /* unused pure expression or super */ null && (false || "");+      function getDomainLocale(path, locale, locales, domainLocales) {+        if (false) {+        } else {+          return false;+        }+      }+      if (+        (typeof exports.default === "function" ||+          (typeof exports.default === "object" && exports.default !== null)) &&+        typeof exports.default.__esModule === "undefined"+      ) {+        Object.defineProperty(exports.default, "__esModule", {+          value: true,+        });+        Object.assign(exports.default, exports);+        module.exports = exports.default;+      } //# sourceMappingURL=get-domain-locale.js.map++      /***/+    },++    /***/ 4591: /***/ (+      __unused_webpack_module,+      __webpack_exports__,+      __webpack_require__+    ) => {+      "use strict";+      __webpack_require__.r(__webpack_exports__);+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,+        /* harmony export */+      });+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =+        __webpack_require__(1503);+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =+        __webpack_require__(6929);+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =+        /*#__PURE__*/ __webpack_require__.n(+          next_link__WEBPACK_IMPORTED_MODULE_1__+        );++      function aLink(props) {+        return /*#__PURE__*/ (0,+        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {+          children: [+            /*#__PURE__*/ (0,+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {+              children: "A Link page!",+            }),+            /*#__PURE__*/ (0,+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(+              next_link__WEBPACK_IMPORTED_MODULE_1___default(),+              {+                href: "/",+                children: "Go to /",+              }+            ),+          ],+        });+      }+      var __N_SSP = true;+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;++      /***/+    },++    /***/ 6929: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(8885);++      /***/+    },++    /***/ 7686: /***/ (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__(2223);+      const _requestidlecallback = __webpack_require__(901);+      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++      /***/+    },++    /***/ 8101: /***/ (__unused_webpack_module, exports) => {+      "use strict";++      Object.defineProperty(exports, "__esModule", {+        value: true,+      });+      Object.defineProperty(exports, "errorOnce", {+        enumerable: true,+        get: function () {+          return errorOnce;+        },+      });+      let errorOnce = (_) => {};+      if (false) {+      } //# sourceMappingURL=error-once.js.map++      /***/+    },++    /***/ 8885: /***/ (module, exports, __webpack_require__) => {       "use strict";       /* __next_internal_client_entry_do_not_use__  cjs */       Object.defineProperty(exports, "__esModule", {@@ -28,17 +359,17 @@       const _react = /*#__PURE__*/ _interop_require_wildcard._(         __webpack_require__(2223)       );-      const _resolvehref = __webpack_require__(2275);-      const _islocalurl = __webpack_require__(3179);-      const _formaturl = __webpack_require__(5486);-      const _utils = __webpack_require__(3708);-      const _addlocale = __webpack_require__(8225);-      const _routercontextsharedruntime = __webpack_require__(6046);-      const _useintersection = __webpack_require__(2678);-      const _getdomainlocale = __webpack_require__(4499);-      const _addbasepath = __webpack_require__(7434);-      const _usemergedref = __webpack_require__(2263);-      const _erroronce = __webpack_require__(2197);+      const _resolvehref = __webpack_require__(7379);+      const _islocalurl = __webpack_require__(4843);+      const _formaturl = __webpack_require__(9374);+      const _utils = __webpack_require__(3116);+      const _addlocale = __webpack_require__(8065);+      const _routercontextsharedruntime = __webpack_require__(5470);+      const _useintersection = __webpack_require__(7686);+      const _getdomainlocale = __webpack_require__(3267);+      const _addbasepath = __webpack_require__(1450);+      const _usemergedref = __webpack_require__(1511);+      const _erroronce = __webpack_require__(8101);       const prefetched = new Set();       function prefetch(router, href, as, options) {         if (false) {@@ -416,344 +747,13 @@        /***/     },--    /***/ 2197: /***/ (__unused_webpack_module, exports) => {-      "use strict";--      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      Object.defineProperty(exports, "errorOnce", {-        enumerable: true,-        get: function () {-          return errorOnce;-        },-      });-      let errorOnce = (_) => {};-      if (false) {-      } //# sourceMappingURL=error-once.js.map--      /***/-    },--    /***/ 2263: /***/ (module, exports, __webpack_require__) => {-      "use strict";--      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      Object.defineProperty(exports, "useMergedRef", {-        enumerable: true,-        get: function () {-          return useMergedRef;-        },-      });-      const _react = __webpack_require__(2223);-      function useMergedRef(refA, refB) {-        const cleanupA = (0, _react.useRef)(null);-        const cleanupB = (0, _react.useRef)(null);-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs-        // (because it hasn't been updated for React 19)-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.-        return (0, _react.useCallback)(-          (current) => {-            if (current === null) {-              const cleanupFnA = cleanupA.current;-              if (cleanupFnA) {-                cleanupA.current = null;-                cleanupFnA();-              }-              const cleanupFnB = cleanupB.current;-              if (cleanupFnB) {-                cleanupB.current = null;-                cleanupFnB();-              }-            } else {-              if (refA) {-                cleanupA.current = applyRef(refA, current);-              }-              if (refB) {-                cleanupB.current = applyRef(refB, current);-              }-            }-          },-          [refA, refB]-        );-      }-      function applyRef(refA, current) {-        if (typeof refA === "function") {-          const cleanup = refA(current);-          if (typeof cleanup === "function") {-            return cleanup;-          } else {-            return () => refA(null);-          }-        } else {-          refA.current = current;-          return () => {-            refA.current = null;-          };-        }-      }-      if (-        (typeof exports.default === "function" ||-          (typeof exports.default === "object" && exports.default !== null)) &&-        typeof exports.default.__esModule === "undefined"-      ) {-        Object.defineProperty(exports.default, "__esModule", {-          value: true,-        });-        Object.assign(exports.default, exports);-        module.exports = exports.default;-      } //# sourceMappingURL=use-merged-ref.js.map--      /***/-    },--    /***/ 2369: /***/ (-      __unused_webpack_module,-      __webpack_exports__,-      __webpack_require__-    ) => {-      "use strict";-      __webpack_require__.r(__webpack_exports__);-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,-        /* harmony export */-      });-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =-        __webpack_require__(1503);-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =-        __webpack_require__(6691);-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =-        /*#__PURE__*/ __webpack_require__.n(-          next_link__WEBPACK_IMPORTED_MODULE_1__-        );--      function aLink(props) {-        return /*#__PURE__*/ (0,-        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {-          children: [-            /*#__PURE__*/ (0,-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {-              children: "A Link page!",-            }),-            /*#__PURE__*/ (0,-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(-              next_link__WEBPACK_IMPORTED_MODULE_1___default(),-              {-                href: "/",-                children: "Go to /",-              }-            ),-          ],-        });-      }-      var __N_SSP = true;-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;--      /***/-    },--    /***/ 2678: /***/ (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__(2223);-      const _requestidlecallback = __webpack_require__(4213);-      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--      /***/-    },--    /***/ 4499: /***/ (module, exports, __webpack_require__) => {-      "use strict";--      Object.defineProperty(exports, "__esModule", {-        value: true,-      });-      Object.defineProperty(exports, "getDomainLocale", {-        enumerable: true,-        get: function () {-          return getDomainLocale;-        },-      });-      const _normalizetrailingslash = __webpack_require__(1379);-      const basePath =-        /* unused pure expression or super */ null && (false || "");-      function getDomainLocale(path, locale, locales, domainLocales) {-        if (false) {-        } else {-          return false;-        }-      }-      if (-        (typeof exports.default === "function" ||-          (typeof exports.default === "object" && exports.default !== null)) &&-        typeof exports.default.__esModule === "undefined"-      ) {-        Object.defineProperty(exports.default, "__esModule", {-          value: true,-        });-        Object.assign(exports.default, exports);-        module.exports = exports.default;-      } //# sourceMappingURL=get-domain-locale.js.map--      /***/-    },--    /***/ 6691: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(69);--      /***/-    },--    /***/ 6771: /***/ (-      __unused_webpack_module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      (window.__NEXT_P = window.__NEXT_P || []).push([-        "/link",-        function () {-          return __webpack_require__(2369);-        },-      ]);-      if (false) {-      }--      /***/-    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(6771)+      __webpack_exec__(2025)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forrouterDirect-HASH.js
@@ -1,7 +1,34 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [188],   {-    /***/ 97: /***/ (+    /***/ 417: /***/ (+      __unused_webpack_module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      (window.__NEXT_P = window.__NEXT_P || []).push([+        "/routerDirect",+        function () {+          return __webpack_require__(5491);+        },+      ]);+      if (false) {+      }++      /***/+    },++    /***/ 1840: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(3252);++      /***/+    },++    /***/ 5491: /***/ (       __unused_webpack_module,       __webpack_exports__,       __webpack_require__@@ -16,7 +43,7 @@       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =         __webpack_require__(1503);       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =-        __webpack_require__(7798);+        __webpack_require__(1840);       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =         /*#__PURE__*/ __webpack_require__.n(           next_router__WEBPACK_IMPORTED_MODULE_1__@@ -35,40 +62,13 @@        /***/     },--    /***/ 4283: /***/ (-      __unused_webpack_module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      (window.__NEXT_P = window.__NEXT_P || []).push([-        "/routerDirect",-        function () {-          return __webpack_require__(97);-        },-      ]);-      if (false) {-      }--      /***/-    },--    /***/ 7798: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(9300);--      /***/-    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(4283)+      __webpack_exec__(417)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forscript-HASH.js
@@ -1,17 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [1209],   {-    /***/ 5964: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(2010);--      /***/-    },--    /***/ 7758: /***/ (+    /***/ 1312: /***/ (       __unused_webpack_module,       __webpack_exports__,       __webpack_require__@@ -26,7 +16,7 @@       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =         __webpack_require__(1503);       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =-        __webpack_require__(5964);+        __webpack_require__(2398);       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =         /*#__PURE__*/ __webpack_require__.n(           next_script__WEBPACK_IMPORTED_MODULE_1__@@ -59,7 +49,17 @@       /***/     },-    /***/ 8803: /***/ (+    /***/ 2398: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(8954);++      /***/+    },++    /***/ 4305: /***/ (       __unused_webpack_module,       __unused_webpack_exports,       __webpack_require__@@ -67,7 +67,7 @@       (window.__NEXT_P = window.__NEXT_P || []).push([         "/script",         function () {-          return __webpack_require__(7758);+          return __webpack_require__(1312);         },       ]);       if (false) {@@ -81,7 +81,7 @@     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(8803)+      __webpack_exec__(4305)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff forwithRouter-HASH.js
@@ -1,7 +1,7 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([   [3263],   {-    /***/ 184: /***/ (+    /***/ 358: /***/ (       __unused_webpack_module,       __webpack_exports__,       __webpack_require__@@ -16,7 +16,7 @@       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =         __webpack_require__(1503);       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =-        __webpack_require__(7798);+        __webpack_require__(1840);       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =         /*#__PURE__*/ __webpack_require__.n(           next_router__WEBPACK_IMPORTED_MODULE_1__@@ -35,7 +35,17 @@       /***/     },-    /***/ 3163: /***/ (+    /***/ 1840: /***/ (+      module,+      __unused_webpack_exports,+      __webpack_require__+    ) => {+      module.exports = __webpack_require__(3252);++      /***/+    },++    /***/ 4041: /***/ (       __unused_webpack_module,       __unused_webpack_exports,       __webpack_require__@@ -43,7 +53,7 @@       (window.__NEXT_P = window.__NEXT_P || []).push([         "/withRouter",         function () {-          return __webpack_require__(184);+          return __webpack_require__(358);         },       ]);       if (false) {@@ -51,23 +61,13 @@        /***/     },--    /***/ 7798: /***/ (-      module,-      __unused_webpack_exports,-      __webpack_require__-    ) => {-      module.exports = __webpack_require__(9300);--      /***/-    },   },   /******/ (__webpack_require__) => {     // webpackRuntimeModules     /******/ var __webpack_exec__ = (moduleId) =>       __webpack_require__((__webpack_require__.s = moduleId));     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>-      __webpack_exec__(3163)+      __webpack_exec__(4041)     );     /******/ var __webpack_exports__ = __webpack_require__.O();     /******/ _N_E = __webpack_exports__;
Diff for436-HASH.js

Diff too large to display

Diff for9760-HASH.js
failed to diff
Diff formain-HASH.js

Diff too large to display

Commit:93f5518

@ijjk
Copy link
Member

ijjk commentedOct 20, 2025
edited
Loading

Failing test suites

Commit:93f5518 |About building and testing Next.js

pnpm test-dev-turbo test/development/app-dir/async-request-warnings/async-request-warnings.test.ts (turbopack)

  • dynamic-requests warnings > warnings on sync cookie access (DD)
  • dynamic-requests warnings > warnings on sync draftMode access (DD)
  • dynamic-requests warnings > warnings on sync headers access (DD)
  • dynamic-requests warnings > warnings on sync params access (DD)
  • dynamic-requests warnings > warnings on sync searchParams access (DD)
  • dynamic-requests warnings > no warnings > should have no warnings on normal rsc page without accessing params (DD)
  • dynamic-requests warnings > no warnings > should only have hydration warnings on hydration mismatch page without accessing params (DD)
Expand output

● dynamic-requests warnings › warnings on sync cookie access

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

● dynamic-requests warnings › warnings on sync draftMode access

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

● dynamic-requests warnings › warnings on sync headers access

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

● dynamic-requests warnings › warnings on sync params access

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

● dynamic-requests warnings › warnings on sync searchParams access

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

● dynamic-requests warnings › no warnings › should have no warnings on normal rsc page without accessing params

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

● dynamic-requests warnings › no warnings › should only have hydration warnings on hydration mismatch page without accessing params

next dev exited unexpectedly with code/signal 1  92 |           if (code || signal) {  93 |             this.childProcess = undefined> 94 |             const error = new Error(     |                           ^  95 |               `next dev exited unexpectedly with code/signal ${code || signal}`  96 |             )  97 |             clearTimeout(serverReadyTimeoutId)  at ChildProcess.<anonymous> (lib/next-modes/next-dev.ts:94:27)

pnpm test test/integration/config-mjs/test/index.test.ts

  • Configuration > should disable X-Powered-By header support (DD)
  • Configuration > correctly imports a package that definesmodule but nomain in package.json (DD)
  • Configuration > should have env variables available on the client (DD)
Expand output

● Configuration › should disable X-Powered-By header support

FetchError: request to http://localhost:38673/module-only-component failed, reason: socket hang up  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7_encoding@0.1.13/node_modules/node-fetch/lib/index.js:1491:11)

● Configuration › correctly imports a package that definesmodule but nomain in package.json

FetchError: request to http://localhost:38673/module-only-component failed, reason: socket hang up  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7_encoding@0.1.13/node_modules/node-fetch/lib/index.js:1491:11)

● Configuration › should have env variables available on the client

FetchError: request to http://localhost:38673/module-only-component failed, reason: socket hang up  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7_encoding@0.1.13/node_modules/node-fetch/lib/index.js:1491:11)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."  44 |     })  45 |> 46 |     it('should re-use the cache for the full page, only for 5 mins', async () => {     |     ^  47 |       let act: ReturnType<typeof createRouterAct>  48 |       const browser = await next.browser('/', {  49 |         beforePageLoad(page) {  at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:46:5)  at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:17:3)  at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:6:1)

@codspeed-hq
Copy link

codspeed-hqbot commentedOct 20, 2025
edited
Loading

CodSpeed Performance Report

Merging#85084 willdegrade performances by 5.43%

Comparing10-19-turbopack_upgrade_image_crate (fcb8ed3) withcanary (8de423c)1

Summary

❌ 1 regression
✅ 7 untouched
⏩ 12 skipped2

⚠️Please fix the performance issues oracknowledge them on CodSpeed.

Benchmarks breakdown

ModeBenchmarkBASEHEADChange
Simulationreact-dom-client.development.js[tracing]383.9 ms405.9 ms-5.43%

Footnotes

  1. No successful run was found oncanary (234984c) during the generation of this report, so 8de423c was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

  2. 12 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.

@mischnicmischnicforce-pushed the10-19-turbopack_upgrade_image_crate branch fromaa576e7 to27c91a1CompareOctober 21, 2025 17:51
@ijjkijjk added the tests labelOct 21, 2025
@mischnicmischnicforce-pushed the10-19-turbopack_upgrade_image_crate branch from27c91a1 to567592bCompareOctober 24, 2025 15:39
@sokrasokra merged commita293884 intocanaryNov 3, 2025
412 of 421 checks passed
@sokraGraphite App
Copy link
Member

Merge activity

@sokrasokra deleted the 10-19-turbopack_upgrade_image_crate branchNovember 3, 2025 09:44
huozhi pushed a commit that referenced this pull requestNov 12, 2025
## What?Upgrade the image crate which includes some bugfixes for bmp files.
huozhi pushed a commit that referenced this pull requestNov 12, 2025
## What?Upgrade the image crate which includes some bugfixes for bmp files.
@github-actionsgithub-actionsbot locked asresolvedand limited conversation to collaboratorsNov 17, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account?Sign in.

Reviewers

@vercelvercel[bot]vercel[bot] left review comments

@sokrasokrasokra approved these changes

Assignees

No one assigned

Labels

created-by: Turbopack teamPRs by the Turbopack team.lockedtestsTurbopackRelated to Turbopack with Next.js.

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

4 participants

@timneutkens@ijjk@sokra@mischnic

[8]ページ先頭

©2009-2026 Movatter.jp