next.js icon indicating copy to clipboard operation
next.js copied to clipboard

chore: prompt (un)install only when there's a change

Open devjiwonchoi opened this issue 1 year ago β€’ 6 comments

Why?

When running next-upgrade, next-request-geo-ip requires to install @vercel/functions and built-in-next-font makes @next/font no longer needed. We added a prompt to ask user whether to (un)install it at https://github.com/vercel/next.js/pull/71038 but it prompts even if there were no transform occurred.

This is unnecessary layer so we only prompt when there's a change caused from the codemod.

No Modification

https://github.com/user-attachments/assets/3acfdb24-c8e7-4189-9c81-4765ce748822

With Modification

https://github.com/user-attachments/assets/f44a8b1c-c75a-4446-afc8-f74111de939d

devjiwonchoi avatar Oct 15 '24 14:10 devjiwonchoi

  • #71308 Graphite πŸ‘ˆ
  • canary

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

Join @devjiwonchoi and the rest of your teammates on Graphite Graphite

devjiwonchoi avatar Oct 15 '24 14:10 devjiwonchoi

Failing test suites

Commit: 5b8704712203f8f1269d5c23a2ac45b0d474c19e

pnpm test test/integration/amp-export-validation/test/index.test.js

  • AMP Validation on Export > production mode > should have shown errors during build
Expand output

● AMP Validation on Export β€Ί production mode β€Ί should have shown errors during build

expect(received).toMatch(expected)

Expected pattern: /error.*The mandatory attribute 'height' is missing in tag 'amp-video'\./
Received string:  "  β–² Next.js 15.0.0-canary.204Β·
   Checking validity of types ...
   Creating an optimized production build ...
 βœ“ Compiled successfully
   Collecting page data ...
   Generating static pages (0/8) ...
   Generating static pages (2/8)Β·Β·
Failed to build /second after 1 attempts.
 ⚠ Linting is disabled.·
Error occurred prerendering page \"/second\". Read more: https://nextjs.org/docs/messages/prerender-errorΒ·
AssertionError: Assertion failed: WebAssembly is uninitialized

  at new module$contents$goog$asserts_AssertionError (../evalmachine.<anonymous>:102:1441)
  at module$contents$goog$asserts_doAssertFailure (../evalmachine.<anonymous>:103:354)
  at goog.asserts.assertExists (../evalmachine.<anonymous>:104:374)
  at Object.module$contents$amp$validator_validateString [as validateString] (../evalmachine.<anonymous>:2238:108)
  at Validator.validateString (../packages/next/dist/compiled/amphtml-validator/index.js:17:2057)
  at validateAmp (../packages/next/dist/export/routes/pages.js:92:34)
  at async exportPagesPage (../packages/next/dist/export/routes/pages.js:109:13)
  at async Span.traceAsyncFn (../packages/next/dist/trace/trace.js:157:20)
  at async exportPage (../packages/next/dist/export/worker.js:348:18)Β·
  > Build error occurred
  Error: Export encountered an error on /second, exiting the build.
  at exportPageWithRetry (../packages/next/dist/export/worker.js:289:31)
      at async Promise.all (index 5)
  at ../async /root/actions-runner/_work/next.js/next.js/packages/next/dist/export/worker.js:319:35
  at async Object.exportPages (../packages/next/dist/export/worker.js:314:5) {
    type: 'ExportPageError',
    code: 'NEXT_EXPORT_PAGE_ERROR'
  }
  "
  at Object.toMatch (integration/amp-export-validation/test/index.test.js:28:29)

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

pnpm test-dev test/development/acceptance-app/hydration-error.test.ts

  • Error overlay for hydration errors in App router > should collapse and uncollapse properly when there are many frames
Expand output

● Error overlay for hydration errors in App router β€Ί should collapse and uncollapse properly when there are many frames

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

Expected: 4
Received: NaN

  826 |
  827 |     retry(async () => {
> 828 |       expect(await getRedboxTotalErrorCount(browser)).toBe(4)
      |                                                       ^
  829 |     })
  830 |
  831 |     const description = await session.getRedboxDescription()

  at toBe (development/acceptance-app/hydration-error.test.ts:828:55)
  at retry (lib/next-test-utils.ts:806:14)

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

ijjk avatar Oct 15 '24 14:10 ijjk

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
buildDuration 19.7s 16.4s N/A
buildDurationCached 15.5s 13.4s N/A
nodeModulesSize 373 MB 373 MB βœ“
nextStartRea..uration (ms) 434ms 434ms βœ“
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
3705-HASH.js gzip 5.27 kB 5.26 kB N/A
6554.HASH.js gzip 168 B 168 B βœ“
7758-HASH.js gzip 44.6 kB 44.6 kB N/A
d2b96154-HASH.js gzip 52.6 kB 52.6 kB N/A
framework-HASH.js gzip 57.4 kB 57.4 kB N/A
main-app-HASH.js gzip 234 B 234 B βœ“
main-HASH.js gzip 32.8 kB 32.8 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 402 B 402 B βœ“
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change 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 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
_app-HASH.js gzip 193 B 192 B N/A
_error-HASH.js gzip 192 B 192 B βœ“
amp-HASH.js gzip 510 B 510 B βœ“
css-HASH.js gzip 340 B 342 B N/A
dynamic-HASH.js gzip 1.84 kB 1.84 kB βœ“
edge-ssr-HASH.js gzip 266 B 265 B N/A
head-HASH.js gzip 363 B 363 B βœ“
hooks-HASH.js gzip 390 B 390 B βœ“
image-HASH.js gzip 4.41 kB 4.41 kB βœ“
index-HASH.js gzip 268 B 268 B βœ“
link-HASH.js gzip 2.78 kB 2.78 kB N/A
routerDirect..HASH.js gzip 326 B 328 B N/A
script-HASH.js gzip 396 B 395 B N/A
withRouter-HASH.js gzip 322 B 324 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B βœ“
Overall change 8.08 kB 8.08 kB βœ“
Client Build Manifests
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
_buildManifest.js gzip 751 B 746 B N/A
Overall change 0 B 0 B βœ“
Rendered Page Sizes
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
index.html gzip 524 B 522 B N/A
link.html gzip 537 B 538 B N/A
withRouter.html gzip 519 B 518 B N/A
Overall change 0 B 0 B βœ“
Edge SSR bundle Size
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
edge-ssr.js gzip 128 kB 128 kB N/A
page.js gzip 188 kB 188 kB N/A
Overall change 0 B 0 B βœ“
Middleware size
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
middleware-b..fest.js gzip 668 B 665 B N/A
middleware-r..fest.js gzip 156 B 156 B βœ“
middleware.js gzip 31 kB 31 kB N/A
edge-runtime..pack.js gzip 844 B 844 B βœ“
Overall change 1 kB 1 kB βœ“
Next Runtimes
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
973-experime...dev.js gzip 322 B 322 B βœ“
973.runtime.dev.js gzip 314 B 314 B βœ“
app-page-exp...dev.js gzip 315 kB 315 kB βœ“
app-page-exp..prod.js gzip 121 kB 121 kB βœ“
app-page-tur..prod.js gzip 134 kB 134 kB βœ“
app-page-tur..prod.js gzip 129 kB 129 kB βœ“
app-page.run...dev.js gzip 306 kB 306 kB βœ“
app-page.run..prod.js gzip 117 kB 117 kB βœ“
app-route-ex...dev.js gzip 35.8 kB 35.8 kB βœ“
app-route-ex..prod.js gzip 24.4 kB 24.4 kB βœ“
app-route-tu..prod.js gzip 24.4 kB 24.4 kB βœ“
app-route-tu..prod.js gzip 24.2 kB 24.2 kB βœ“
app-route.ru...dev.js gzip 37.4 kB 37.4 kB βœ“
app-route.ru..prod.js gzip 24.2 kB 24.2 kB βœ“
pages-api-tu..prod.js gzip 9.61 kB 9.61 kB βœ“
pages-api.ru...dev.js gzip 11.4 kB 11.4 kB βœ“
pages-api.ru..prod.js gzip 9.61 kB 9.61 kB βœ“
pages-turbo...prod.js gzip 20.9 kB 20.9 kB βœ“
pages.runtim...dev.js gzip 26.5 kB 26.5 kB βœ“
pages.runtim..prod.js gzip 20.9 kB 20.9 kB βœ“
server.runti..prod.js gzip 58.3 kB 58.3 kB βœ“
Overall change 1.45 MB 1.45 MB βœ“
build cache
vercel/next.js canary vercel/next.js 10-15-chore_prompt_un_install_only_when_there_s_a_change Change
0.pack gzip 1.84 MB 1.84 MB N/A
index.pack gzip 143 kB 142 kB N/A
Overall change 0 B 0 B βœ“
Diff details
Diff for page.js
@@ -15,7 +15,7 @@
       /***/
     },
 
-    /***/ 8483: /***/ (
+    /***/ 8053: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -30,7 +30,7 @@
         default: () => /* binding */ nHandler,
       });
 
-      // NAMESPACE OBJECT: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsExwQnG%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // NAMESPACE OBJECT: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsExwQnG%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       var page_next_edge_ssr_entry_namespaceObject = {};
       __webpack_require__.r(page_next_edge_ssr_entry_namespaceObject);
       __webpack_require__.d(page_next_edge_ssr_entry_namespaceObject, {
@@ -82,35 +82,35 @@
         workUnitAsyncStorage: () => entry_base /* workUnitAsyncStorage */.Sz,
       });
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/web/globals.js
-      var globals = __webpack_require__(341);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
-      var adapter = __webpack_require__(7977);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 85 modules
-      var render = __webpack_require__(6616);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 5 modules
-      var incremental_cache = __webpack_require__(6652);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/app-render/app-render.js + 63 modules
-      var app_render = __webpack_require__(5606);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/route-modules/app-page/module.compiled.js
-      var module_compiled = __webpack_require__(620);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/route-kind.js
-      var route_kind = __webpack_require__(8573);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/client/components/error-boundary.js
-      var error_boundary = __webpack_require__(5774);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/app-render/entry-base.js + 29 modules
-      var entry_base = __webpack_require__(5174); // CONCATENATED MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsExwQnG%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/web/globals.js
+      var globals = __webpack_require__(9156);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
+      var adapter = __webpack_require__(5723);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 85 modules
+      var render = __webpack_require__(8935);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 5 modules
+      var incremental_cache = __webpack_require__(7771);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/app-render/app-render.js + 63 modules
+      var app_render = __webpack_require__(9559);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/route-modules/app-page/module.compiled.js
+      var module_compiled = __webpack_require__(7601);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/route-kind.js
+      var route_kind = __webpack_require__(5655);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/client/components/error-boundary.js
+      var error_boundary = __webpack_require__(5847);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/app-render/entry-base.js + 29 modules
+      var entry_base = __webpack_require__(2393); // CONCATENATED MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsExwQnG%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       const module0 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 8827)
+          __webpack_require__.bind(__webpack_require__, 4114)
         );
       const module1 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 5435)
+          __webpack_require__.bind(__webpack_require__, 3641)
         );
       const page2 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 4270)
+          __webpack_require__.bind(__webpack_require__, 8250)
         );
 
       // We inject the tree and pages here so that we can use them in the route
@@ -173,12 +173,12 @@
       });
 
       //# sourceMappingURL=app-page.js.map
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/lib/page-types.js
-      var page_types = __webpack_require__(7765);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/app-render/encryption-utils.js
-      var encryption_utils = __webpack_require__(2676);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/esm/server/app-render/action-utils.js
-      var action_utils = __webpack_require__(1240); // CONCATENATED MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImFwcElzclN0YXR1cyI6dHJ1ZSwiYnVpbGRBY3Rpdml0eSI6dHJ1ZSwiYnVpbGRBY3Rpdml0eVBvc2l0aW9uIjoiYm90dG9tLXJpZ2h0In0sIm9uRGVtYW5kRW50cmllcyI6eyJtYXhJbmFjdGl2ZUFnZSI6NjAwMDAsInBhZ2VzQnVmZmVyTGVuZ3RoIjo1fSwiYW1wIjp7ImNhbm9uaWNhbEJhc2UiOiIifSwiYmFzZVBhdGgiOiIiLCJzYXNzT3B0aW9ucyI6e30sInRyYWlsaW5nU2xhc2giOmZhbHNlLCJpMThuIjpudWxsLCJwcm9kdWN0aW9uQnJvd3NlclNvdXJjZU1hcHMiOmZhbHNlLCJleGNsdWRlRGVmYXVsdE1vbWVudExvY2FsZXMiOnRydWUsInNlcnZlclJ1bnRpbWVDb25maWciOnt9LCJwdWJsaWNSdW50aW1lQ29uZmlnIjp7fSwicmVhY3RQcm9kdWN0aW9uUHJvZmlsaW5nIjpmYWxzZSwicmVhY3RTdHJpY3RNb2RlIjpudWxsLCJyZWFjdE1heEhlYWRlcnNMZW5ndGgiOjYwMDAsImh0dHBBZ2VudE9wdGlvbnMiOnsia2VlcEFsaXZlIjp0cnVlfSwibG9nZ2luZyI6e30sImV4cGlyZVRpbWUiOjMxNTM2MDAwLCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sIm91dHB1dEZpbGVUcmFjaW5nUm9vdCI6Ii90bXAvbmV4dC1zdGF0c0V4d1FuRy9zdGF0cy1hcHAiLCJleHBlcmltZW50YWwiOnsiY2FjaGVMaWZlIjp7ImRlZmF1bHQiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6OTAwLCJleHBpcmUiOjQyOTQ5NjcyOTR9LCJzZWNvbmRzIjp7InN0YWxlIjowLCJyZXZhbGlkYXRlIjoxLCJleHBpcmUiOjF9LCJtaW51dGVzIjp7InN0YWxlIjozMDAsInJldmFsaWRhdGUiOjYwLCJleHBpcmUiOjM2MDB9LCJob3VycyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjozNjAwLCJleHBpcmUiOjg2NDAwfSwiZGF5cyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjo4NjQwMCwiZXhwaXJlIjo2MDQ4MDB9LCJ3ZWVrcyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjo2MDQ4MDAsImV4cGlyZSI6MjU5MjAwMH0sIm1heCI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjoyNTkyMDAwLCJleHBpcmUiOjQyOTQ5NjcyOTR9fSwiY2FjaGVIYW5kbGVycyI6e30sIm11bHRpWm9uZURyYWZ0TW9kZSI6ZmFsc2UsImFwcE5hdkZhaWxIYW5kbGluZyI6ZmFsc2UsInByZXJlbmRlckVhcmx5RXhpdCI6dHJ1ZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwic3djVHJhY2VQcm9maWxpbmciOmZhbHNlLCJmb3JjZVN3Y1RyYW5zZm9ybXMiOmZhbHNlLCJsYXJnZVBhZ2VEYXRhQnl0ZXMiOjEyODAwMCwidHVyYm8iOnsicm9vdCI6Ii90bXAvbmV4dC1zdGF0c0V4d1FuRy9zdGF0cy1hcHAifSwidHlwZWRSb3V0ZXMiOmZhbHNlLCJ0eXBlZEVudiI6ZmFsc2UsInBhcmFsbGVsU2VydmVyQ29tcGlsZXMiOmZhbHNlLCJwYXJhbGxlbFNlcnZlckJ1aWxkVHJhY2VzIjpmYWxzZSwicHByIjpmYWxzZSwid2VicGFja01lbW9yeU9wdGltaXphdGlvbnMiOmZhbHNlLCJvcHRpbWl6ZVNlcnZlclJlYWN0Ijp0cnVlLCJ1c2VFYXJseUltcG9ydCI6ZmFsc2UsInN0YWxlVGltZXMiOnsiZHluYW1pYyI6MCwic3RhdGljIjozMDB9LCJhZnRlciI6ZmFsc2UsInNlcnZlckNvbXBvbmVudHNIbXJDYWNoZSI6dHJ1ZSwic3RhdGljR2VuZXJhdGlvbk1heENvbmN1cnJlbmN5Ijo4LCJzdGF0aWNHZW5lcmF0aW9uTWluUGFnZXNQZXJXb3JrZXIiOjI1LCJkeW5hbWljSU8iOmZhbHNlLCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiZWZmZWN0IiwiQGVmZmVjdC9zY2hlbWEiLCJAZWZmZWN0L3BsYXRmb3JtIiwiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlIiwiQGVmZmVjdC9wbGF0Zm9ybS1icm93c2VyIiwiQGVmZmVjdC9wbGF0Zm9ybS1idW4iLCJAZWZmZWN0L3NxbCIsIkBlZmZlY3Qvc3FsLW1zc3FsIiwiQGVmZmVjdC9zcWwtbXlzcWwyIiwiQGVmZmVjdC9zcWwtcGciLCJAZWZmZWN0L3NxbC1zcXVsaXRlLW5vZGUiLCJAZWZmZWN0L3NxbC1zcXVsaXRlLWJ1biIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtd2FzbSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtcmVhY3QtbmF0aXZlIiwiQGVmZmVjdC9ycGMiLCJAZWZmZWN0L3JwYy1odHRwIiwiQGVmZmVjdC90eXBlY2xhc3MiLCJAZWZmZWN0L2V4cGVyaW1lbnRhbCIsIkBlZmZlY3Qvb3BlbnRlbGVtZXRyeSIsIkBtYXRlcmlhbC11aS9jb3JlIiwiQG1hdGVyaWFsLXVpL2ljb25zIiwiQHRhYmxlci9pY29ucy1yZWFjdCIsIm11aS1jb3JlIiwicmVhY3QtaWNvbnMvYWkiLCJyZWFjdC1pY29ucy9iaSIsInJlYWN0LWljb25zL2JzIiwicmVhY3QtaWNvbnMvY2ciLCJyZWFjdC1pY29ucy9jaSIsInJlYWN0LWljb25zL2RpIiwicmVhY3QtaWNvbnMvZmEiLCJyZWFjdC1pY29ucy9mYTYiLCJyZWFjdC1pY29ucy9mYyIsInJlYWN0LWljb25zL2ZpIiwicmVhY3QtaWNvbnMvZ2kiLCJyZWFjdC1pY29ucy9nbyIsInJlYWN0LWljb25zL2dyIiwicmVhY3QtaWNvbnMvaGkiLCJyZWFjdC1pY29ucy9oaTIiLCJyZWFjdC1pY29ucy9pbSIsInJlYWN0LWljb25zL2lvIiwicmVhY3QtaWNvbnMvaW81IiwicmVhY3QtaWNvbnMvbGlhIiwicmVhY3QtaWNvbnMvbGliIiwicmVhY3QtaWNvbnMvbHUiLCJyZWFjdC1pY29ucy9tZCIsInJlYWN0LWljb25zL3BpIiwicmVhY3QtaWNvbnMvcmkiLCJyZWFjdC1pY29ucy9yeCIsInJlYWN0LWljb25zL3NpIiwicmVhY3QtaWNvbnMvc2wiLCJyZWFjdC1pY29ucy90YiIsInJlYWN0LWljb25zL3RmaSIsInJlYWN0LWljb25zL3RpIiwicmVhY3QtaWNvbnMvdnNjIiwicmVhY3QtaWNvbnMvd2kiXX0sImJ1bmRsZVBhZ2VzUm91dGVyRGVwZW5kZW5jaWVzIjpmYWxzZSwiY29uZmlnRmlsZSI6Ii90bXAvbmV4dC1zdGF0c0V4d1FuRy9zdGF0cy1hcHAvbmV4dC5jb25maWcuanMiLCJjb25maWdGaWxlTmFtZSI6Im5leHQuY29uZmlnLmpzIn0=","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzRXh3UW5HJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JmZseWluZ1NodXR0bGU9ZmFsc2UmcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCE=","sriEnabled":false,"middlewareConfig":"e30=","cacheHandlers":"{}"}!
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/lib/page-types.js
+      var page_types = __webpack_require__(2676);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/app-render/encryption-utils.js
+      var encryption_utils = __webpack_require__(2306);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/esm/server/app-render/action-utils.js
+      var action_utils = __webpack_require__(3631); // CONCATENATED MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImFwcElzclN0YXR1cyI6dHJ1ZSwiYnVpbGRBY3Rpdml0eSI6dHJ1ZSwiYnVpbGRBY3Rpdml0eVBvc2l0aW9uIjoiYm90dG9tLXJpZ2h0In0sIm9uRGVtYW5kRW50cmllcyI6eyJtYXhJbmFjdGl2ZUFnZSI6NjAwMDAsInBhZ2VzQnVmZmVyTGVuZ3RoIjo1fSwiYW1wIjp7ImNhbm9uaWNhbEJhc2UiOiIifSwiYmFzZVBhdGgiOiIiLCJzYXNzT3B0aW9ucyI6e30sInRyYWlsaW5nU2xhc2giOmZhbHNlLCJpMThuIjpudWxsLCJwcm9kdWN0aW9uQnJvd3NlclNvdXJjZU1hcHMiOmZhbHNlLCJleGNsdWRlRGVmYXVsdE1vbWVudExvY2FsZXMiOnRydWUsInNlcnZlclJ1bnRpbWVDb25maWciOnt9LCJwdWJsaWNSdW50aW1lQ29uZmlnIjp7fSwicmVhY3RQcm9kdWN0aW9uUHJvZmlsaW5nIjpmYWxzZSwicmVhY3RTdHJpY3RNb2RlIjpudWxsLCJyZWFjdE1heEhlYWRlcnNMZW5ndGgiOjYwMDAsImh0dHBBZ2VudE9wdGlvbnMiOnsia2VlcEFsaXZlIjp0cnVlfSwibG9nZ2luZyI6e30sImV4cGlyZVRpbWUiOjMxNTM2MDAwLCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sIm91dHB1dEZpbGVUcmFjaW5nUm9vdCI6Ii90bXAvbmV4dC1zdGF0c0V4d1FuRy9zdGF0cy1hcHAiLCJleHBlcmltZW50YWwiOnsiY2FjaGVMaWZlIjp7ImRlZmF1bHQiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6OTAwLCJleHBpcmUiOjQyOTQ5NjcyOTR9LCJzZWNvbmRzIjp7InN0YWxlIjowLCJyZXZhbGlkYXRlIjoxLCJleHBpcmUiOjF9LCJtaW51dGVzIjp7InN0YWxlIjozMDAsInJldmFsaWRhdGUiOjYwLCJleHBpcmUiOjM2MDB9LCJob3VycyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjozNjAwLCJleHBpcmUiOjg2NDAwfSwiZGF5cyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjo4NjQwMCwiZXhwaXJlIjo2MDQ4MDB9LCJ3ZWVrcyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjo2MDQ4MDAsImV4cGlyZSI6MjU5MjAwMH0sIm1heCI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjoyNTkyMDAwLCJleHBpcmUiOjQyOTQ5NjcyOTR9fSwiY2FjaGVIYW5kbGVycyI6e30sIm11bHRpWm9uZURyYWZ0TW9kZSI6ZmFsc2UsImFwcE5hdkZhaWxIYW5kbGluZyI6ZmFsc2UsInByZXJlbmRlckVhcmx5RXhpdCI6dHJ1ZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwic3djVHJhY2VQcm9maWxpbmciOmZhbHNlLCJmb3JjZVN3Y1RyYW5zZm9ybXMiOmZhbHNlLCJsYXJnZVBhZ2VEYXRhQnl0ZXMiOjEyODAwMCwidHVyYm8iOnsicm9vdCI6Ii90bXAvbmV4dC1zdGF0c0V4d1FuRy9zdGF0cy1hcHAifSwidHlwZWRSb3V0ZXMiOmZhbHNlLCJ0eXBlZEVudiI6ZmFsc2UsInBhcmFsbGVsU2VydmVyQ29tcGlsZXMiOmZhbHNlLCJwYXJhbGxlbFNlcnZlckJ1aWxkVHJhY2VzIjpmYWxzZSwicHByIjpmYWxzZSwid2VicGFja01lbW9yeU9wdGltaXphdGlvbnMiOmZhbHNlLCJvcHRpbWl6ZVNlcnZlclJlYWN0Ijp0cnVlLCJ1c2VFYXJseUltcG9ydCI6ZmFsc2UsInN0YWxlVGltZXMiOnsiZHluYW1pYyI6MCwic3RhdGljIjozMDB9LCJhZnRlciI6ZmFsc2UsInNlcnZlckNvbXBvbmVudHNIbXJDYWNoZSI6dHJ1ZSwic3RhdGljR2VuZXJhdGlvbk1heENvbmN1cnJlbmN5Ijo4LCJzdGF0aWNHZW5lcmF0aW9uTWluUGFnZXNQZXJXb3JrZXIiOjI1LCJkeW5hbWljSU8iOmZhbHNlLCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiZWZmZWN0IiwiQGVmZmVjdC9zY2hlbWEiLCJAZWZmZWN0L3BsYXRmb3JtIiwiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlIiwiQGVmZmVjdC9wbGF0Zm9ybS1icm93c2VyIiwiQGVmZmVjdC9wbGF0Zm9ybS1idW4iLCJAZWZmZWN0L3NxbCIsIkBlZmZlY3Qvc3FsLW1zc3FsIiwiQGVmZmVjdC9zcWwtbXlzcWwyIiwiQGVmZmVjdC9zcWwtcGciLCJAZWZmZWN0L3NxbC1zcXVsaXRlLW5vZGUiLCJAZWZmZWN0L3NxbC1zcXVsaXRlLWJ1biIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtd2FzbSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtcmVhY3QtbmF0aXZlIiwiQGVmZmVjdC9ycGMiLCJAZWZmZWN0L3JwYy1odHRwIiwiQGVmZmVjdC90eXBlY2xhc3MiLCJAZWZmZWN0L2V4cGVyaW1lbnRhbCIsIkBlZmZlY3Qvb3BlbnRlbGVtZXRyeSIsIkBtYXRlcmlhbC11aS9jb3JlIiwiQG1hdGVyaWFsLXVpL2ljb25zIiwiQHRhYmxlci9pY29ucy1yZWFjdCIsIm11aS1jb3JlIiwicmVhY3QtaWNvbnMvYWkiLCJyZWFjdC1pY29ucy9iaSIsInJlYWN0LWljb25zL2JzIiwicmVhY3QtaWNvbnMvY2ciLCJyZWFjdC1pY29ucy9jaSIsInJlYWN0LWljb25zL2RpIiwicmVhY3QtaWNvbnMvZmEiLCJyZWFjdC1pY29ucy9mYTYiLCJyZWFjdC1pY29ucy9mYyIsInJlYWN0LWljb25zL2ZpIiwicmVhY3QtaWNvbnMvZ2kiLCJyZWFjdC1pY29ucy9nbyIsInJlYWN0LWljb25zL2dyIiwicmVhY3QtaWNvbnMvaGkiLCJyZWFjdC1pY29ucy9oaTIiLCJyZWFjdC1pY29ucy9pbSIsInJlYWN0LWljb25zL2lvIiwicmVhY3QtaWNvbnMvaW81IiwicmVhY3QtaWNvbnMvbGlhIiwicmVhY3QtaWNvbnMvbGliIiwicmVhY3QtaWNvbnMvbHUiLCJyZWFjdC1pY29ucy9tZCIsInJlYWN0LWljb25zL3BpIiwicmVhY3QtaWNvbnMvcmkiLCJyZWFjdC1pY29ucy9yeCIsInJlYWN0LWljb25zL3NpIiwicmVhY3QtaWNvbnMvc2wiLCJyZWFjdC1pY29ucy90YiIsInJlYWN0LWljb25zL3RmaSIsInJlYWN0LWljb25zL3RpIiwicmVhY3QtaWNvbnMvdnNjIiwicmVhY3QtaWNvbnMvd2kiXX0sImJ1bmRsZVBhZ2VzUm91dGVyRGVwZW5kZW5jaWVzIjpmYWxzZSwiY29uZmlnRmlsZSI6Ii90bXAvbmV4dC1zdGF0c0V4d1FuRy9zdGF0cy1hcHAvbmV4dC5jb25maWcuanMiLCJjb25maWdGaWxlTmFtZSI6Im5leHQuY29uZmlnLmpzIn0=","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzRXh3UW5HJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JmZseWluZ1NodXR0bGU9ZmFsc2UmcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCE=","sriEnabled":false,"middlewareConfig":"e30=","cacheHandlers":"{}"}!
       var _self___RSC_MANIFEST;
 
       const incrementalCacheHandler = null;
@@ -456,56 +456,56 @@
       /***/
     },
 
-    /***/ 9774: /***/ (
+    /***/ 5944: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3080)
+        __webpack_require__.bind(__webpack_require__, 6831)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 8158)
+        __webpack_require__.bind(__webpack_require__, 8483)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6025)
+        __webpack_require__.bind(__webpack_require__, 9469)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4399)
+        __webpack_require__.bind(__webpack_require__, 8542)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2908)
+        __webpack_require__.bind(__webpack_require__, 6692)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 880)
+        __webpack_require__.bind(__webpack_require__, 1810)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 8683)
+        __webpack_require__.bind(__webpack_require__, 7170)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 943)
+        __webpack_require__.bind(__webpack_require__, 1434)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6186)
+        __webpack_require__.bind(__webpack_require__, 2143)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3115)
+        __webpack_require__.bind(__webpack_require__, 4403)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3906)
+        __webpack_require__.bind(__webpack_require__, 1634)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6714)
+        __webpack_require__.bind(__webpack_require__, 5293)
       );
 
       /***/
     },
 
-    /***/ 4679: /***/ () => {
+    /***/ 6715: /***/ () => {
       /***/
     },
 
-    /***/ 4270: /***/ (
+    /***/ 8250: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -525,7 +525,7 @@
       /***/
     },
 
-    /***/ 8827: /***/ (
+    /***/ 4114: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -537,7 +537,7 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(6090);
+        __webpack_require__(5783);
 
       function RootLayout({ children }) {
         return /*#__PURE__*/ (0,
@@ -556,7 +556,7 @@
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ __webpack_require__.O(0, [89, 985], () => __webpack_exec__(8483));
+    /******/ __webpack_require__.O(0, [81, 809], () => __webpack_exec__(8053));
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ (_ENTRIES = typeof _ENTRIES === "undefined" ? {} : _ENTRIES)[
       "middleware_app/app-edge-ssr/page"
Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for dynamic-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2739],
   {
-    /***/ 559: /***/ (
+    /***/ 7848: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/dynamic",
         function () {
-          return __webpack_require__(3073);
+          return __webpack_require__(1691);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 1586: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1756: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -51,7 +51,7 @@
         __webpack_require__(8966)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5739)
+        __webpack_require__(8970)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -152,7 +152,7 @@
       /***/
     },
 
-    /***/ 5372: /***/ (
+    /***/ 1203: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -179,7 +179,7 @@
       /***/
     },
 
-    /***/ 5739: /***/ (
+    /***/ 8970: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -221,7 +221,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(8966)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(5372);
+      const _loadablecontextsharedruntime = __webpack_require__(1203);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -456,7 +456,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 3073: /***/ (
+    /***/ 1691: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -471,7 +471,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(191);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(35);
+        __webpack_require__(2093);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -480,12 +480,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 6554)
-            .then(__webpack_require__.bind(__webpack_require__, 6554))
+            .e(/* import() */ 6026)
+            .then(__webpack_require__.bind(__webpack_require__, 6026))
             .then((mod) => mod.Hello),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 6554],
+            webpack: () => [/*require.resolve*/ 6026],
           },
         }
       );
@@ -512,8 +512,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 35: /***/ (module, __unused_webpack_exports, __webpack_require__) => {
-      module.exports = __webpack_require__(1586);
+    /***/ 2093: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(1756);
 
       /***/
     },
@@ -523,7 +527,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, [2888, 9774, 179], () =>
-      __webpack_exec__(559)
+      __webpack_exec__(7848)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [8358],
   {
-    /***/ 9320: /***/ (
+    /***/ 1654: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(452);
+          return __webpack_require__(1251);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 7876: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9966: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -40,17 +40,17 @@
         __webpack_require__(7811)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9825)
+        __webpack_require__(9953)
       );
-      const _getimgprops = __webpack_require__(5306);
-      const _imageconfig = __webpack_require__(2395);
-      const _imageconfigcontextsharedruntime = __webpack_require__(5181);
-      const _warnonce = __webpack_require__(1614);
-      const _routercontextsharedruntime = __webpack_require__(450);
+      const _getimgprops = __webpack_require__(839);
+      const _imageconfig = __webpack_require__(3799);
+      const _imageconfigcontextsharedruntime = __webpack_require__(622);
+      const _warnonce = __webpack_require__(7864);
+      const _routercontextsharedruntime = __webpack_require__(6498);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(4342)
+        __webpack_require__(1648)
       );
-      const _usemergedref = __webpack_require__(3680);
+      const _usemergedref = __webpack_require__(8436);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -371,7 +371,7 @@
       /***/
     },
 
-    /***/ 3680: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8436: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -432,7 +432,7 @@
       /***/
     },
 
-    /***/ 5306: /***/ (
+    /***/ 839: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -448,9 +448,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(1614);
-      const _imageblursvg = __webpack_require__(494);
-      const _imageconfig = __webpack_require__(2395);
+      const _warnonce = __webpack_require__(7864);
+      const _imageblursvg = __webpack_require__(1583);
+      const _imageconfig = __webpack_require__(3799);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -824,7 +824,7 @@
       /***/
     },
 
-    /***/ 494: /***/ (__unused_webpack_module, exports) => {
+    /***/ 1583: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -879,7 +879,7 @@
       /***/
     },
 
-    /***/ 4039: /***/ (
+    /***/ 973: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -906,10 +906,10 @@
         },
       });
       const _interop_require_default = __webpack_require__(9608);
-      const _getimgprops = __webpack_require__(5306);
-      const _imagecomponent = __webpack_require__(7876);
+      const _getimgprops = __webpack_require__(839);
+      const _imagecomponent = __webpack_require__(9966);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(4342)
+        __webpack_require__(1648)
       );
       function getImageProps(imgProps) {
         const { props } = (0, _getimgprops.getImgProps)(imgProps, {
@@ -941,7 +941,7 @@
       /***/
     },
 
-    /***/ 4342: /***/ (__unused_webpack_module, exports) => {
+    /***/ 1648: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -976,7 +976,7 @@
       /***/
     },
 
-    /***/ 452: /***/ (
+    /***/ 1251: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -993,8 +993,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(191);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_lmdvfmjq4cjj6zeyg7ucgwxtgm/node_modules/next/image.js
-      var next_image = __webpack_require__(1047);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-65a56d0e-20241020_re_mrxwdyewdpyfozpybp6e5l6che/node_modules/next/image.js
+      var next_image = __webpack_require__(382);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // CONCATENATED MODULE: ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -1024,12 +1024,12 @@
       /***/
     },
 
-    /***/ 1047: /***/ (
+    /***/ 382: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4039);
+      module.exports = __webpack_require__(973);
 
       /***/
     },
@@ -1039,7 +1039,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [2888, 9774, 179], () =>
-      __webpack_exec__(9320)
+      __webpack_exec__(1654)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 7758-HASH.js

Diff too large to display

Commit: 5b8704712203f8f1269d5c23a2ac45b0d474c19e

ijjk avatar Oct 15 '24 14:10 ijjk

Now that we have a smarter check, do we even need to prompt? If the codemod was applied, you must install @vercel/functions.

eps1lon avatar Oct 18 '24 13:10 eps1lon

Yeah I'll add prompt for geo-ip codemod that it requires @vercel/functions. If yes, will just install if changed.

devjiwonchoi avatar Oct 18 '24 13:10 devjiwonchoi

Yeah I'll add prompt for geo-ip codemod that it requires @vercel/functions. If yes, will just install if changed.

What prompt do you want to add? Or do you mean that the description of the codemod will include that it requires vercel/functions?

We already have a prompt to select codemods.

eps1lon avatar Oct 18 '24 13:10 eps1lon