Skip to content

Conversation

Netail
Copy link
Contributor

@Netail Netail commented Jul 15, 2025

What?

Bump webpack to the latest version, including a CSS order fix when a package uses sideEffects

Fixes # #72846 (hopefully) in favour of #70087

@Netail Netail changed the title bump webpack bump [email protected] Jul 15, 2025
@ijjk
Copy link
Member

ijjk commented Jul 15, 2025

Allow CI Workflow Run

  • approve CI run for commit: ce2abfe

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

@Netail Netail changed the title bump [email protected] bump [email protected] (fix css sideEffects order) Jul 16, 2025
@Netail Netail force-pushed the fix/css-order-side-effect branch 3 times, most recently from a396fd1 to ce2abfe Compare July 23, 2025 14:43
@huozhi huozhi added the CI approved Approve running CI for fork label Jul 23, 2025
@ijjk ijjk added the Rspack label Jul 23, 2025
@ijjk
Copy link
Member

ijjk commented Jul 23, 2025

Failing test suites

Commit: 0029509 | About building and testing Next.js

pnpm test-dev-experimental test/development/app-dir/owner-stack-invalid-element-type/owner-stack-invalid-element-type.test.ts(Experimental)

  • devtools-position-bottom-right > should devtools indicator position initially be bottom-right when configured (DD)
Expand output

● devtools-position-bottom-right › should devtools indicator position initially be bottom-right when configured

page.goto: net::ERR_ABORTED; maybe frame was detached?
Call log:
  - navigating to "http://localhost:37653/", waiting until "load"

  335 |     await opts?.beforePageLoad?.(page)
  336 |
> 337 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  338 |   }
  339 |
  340 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:337:16)
  at webdriver (lib/next-webdriver.ts:151:3)
  at Object.<anonymous> (development/app-dir/devtools-position/bottom-right-position.test.ts:15:21)

● Test suite failed to run

browserContext.close: Target page, context or browser has been closed

  42 | export async function quit() {
  43 |   await Promise.all(pendingTeardown.map((fn) => fn()))
> 44 |   await context?.close()
     |   ^
  45 |   await browser?.close()
  46 |   context = undefined
  47 |   browser = undefined

  at quit (lib/browsers/playwright.ts:44:3)
  at Object.<anonymous> (lib/next-webdriver.ts:45:7)

pnpm test test/integration/next-image-new/default/test/static.test.ts (turbopack)

  • Static Image Component Tests > development mode > Should allow an image with a static src to omit height and width (DD)
Expand output

● Static Image Component Tests › development mode › Should allow an image with a static src to omit height and width

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

  511 |
  512 |     return this.startChain(async () => {
> 513 |       const el = await page.waitForSelector(selector, {
      |                             ^
  514 |         timeout,
  515 |         state,
  516 |       })

  at waitForSelector (lib/browsers/playwright.ts:513:29)
  at Playwright._chain (lib/browsers/playwright.ts:643:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:624:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:512:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:397:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:417:17)
  at Object.elementById (integration/next-image-new/default/test/static.test.ts:26:26)

pnpm test-start-experimental test/e2e/app-dir/scss/webpack-error/webpack-error.test.ts(Experimental)

  • SCSS Support > Friendly Webpack Error > should be a friendly error successfully (DD)
Expand output

● SCSS Support › Friendly Webpack Error › should be a friendly error successfully

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

Expected substring: not "css-loader"
Received string:        "   ▲ Next.js 15.6.0-canary.35 (webpack)
   - Experiments (use with caution):
     ✓ cacheComponents (enabled by `__NEXT_EXPERIMENTAL_CACHE_COMPONENTS`)
     ✓ clientParamParsing (enabled by `__NEXT_EXPERIMENTAL_PPR`)
     ✓ clientSegmentCache (enabled by `__NEXT_EXPERIMENTAL_PPR`)
     ✓ enablePrerenderSourceMaps (enabled by `experimental.cacheComponents`)
     ✓ ppr (enabled by `__NEXT_EXPERIMENTAL_CACHE_COMPONENTS`)
     ✓ rdcForNavigations (enabled by `__NEXT_EXPERIMENTAL_CACHE_COMPONENTS`)

   Linting and checking validity of types ...
   Creating an optimized production build ...
<w> [webpack.cache.PackFileCacheStrategy] Skipped not serializable cache item 'Compilation/modules|javascript/auto|/tmp/next-install-1031de9ad71c98484934003a5a4185d769582405fd63ffadc16f508937dc8ad1/node_modules/.pnpm/next@file+..+next-repo-251dca4eb7af6e8eadd0836688e934c58f5f132131612cefe53aac039b70aba0_ba87482e7e4b084bed2bbb58c84ddd3f/node_modules/next/dist/compiled/mini-css-extract-plugin/loader.js??ruleSet[1].rules[8].oneOf[14].use[0]!/tmp/next-install-1031de9ad71c98484934003a5a4185d769582405fd63ffadc16f508937dc8ad1/node_modules/.pnpm/next@file+..+next-repo-251dca4eb7af6e8eadd0836688e934c58f5f132131612cefe53aac039b70aba0_ba87482e7e4b084bed2bbb58c84ddd3f/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[8].oneOf[14].use[1]!/tmp/next-install-1031de9ad71c98484934003a5a4185d769582405fd63ffadc16f508937dc8ad1/node_modules/.pnpm/next@file+..+next-repo-251dca4eb7af6e8eadd0836688e934c58f5f132131612cefe53aac039b70aba0_ba87482e7e4b084bed2bbb58c84ddd3f/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[8].oneOf[14].use[2]!/tmp/next-install-1031de9ad71c98484934003a5a4185d769582405fd63ffadc16f508937dc8ad1/node_modules/.pnpm/next@file+..+next-repo-251dca4eb7af6e8eadd0836688e934c58f5f132131612cefe53aac039b70aba0_ba87482e7e4b084bed2bbb58c84ddd3f/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/index.js??ruleSet[1].rules[8].oneOf[14].use[3]!/tmp/next-install-1031de9ad71c98484934003a5a4185d769582405fd63ffadc16f508937dc8ad1/node_modules/.pnpm/next@file+..+next-repo-251dca4eb7af6e8eadd0836688e934c58f5f132131612cefe53aac039b70aba0_ba87482e7e4b084bed2bbb58c84ddd3f/node_modules/next/dist/compiled/sass-loader/cjs.js??ruleSet[1].rules[8].oneOf[14].use[4]!/tmp/next-install-1031de9ad71c98484934003a5a4185d769582405fd63ffadc16f508937dc8ad1/styles/global.scss|pages-dir-browser': No serializer registered for HookWebpackError
<w> while serializing webpack/lib/cache/PackFileCacheStrategy.PackContentItems -> webpack/lib/NormalModule -> webpack/lib/ModuleBuildError -> webpack/lib/WebpackError -> HookWebpackError
Failed to compile.

./styles/global.scss
To use Next.js' built-in Sass support, you first need to install `sass`.
Run `npm i sass` or `yarn add sass` inside your workspace.

Learn more: https://nextjs.org/docs/messages/install-sass

./styles/global.scss
To use Next.js' built-in Sass support, you first need to install `sass`.
Run `npm i sass` or `yarn add sass` inside your workspace.

Learn more: https://nextjs.org/docs/messages/install-sass


> Build failed because of webpack errors
"

  25 |       )
  26 |
> 27 |       expect(cliOutput).not.toContain('css-loader')
     |                             ^
  28 |       expect(cliOutput).not.toContain('sass-loader')
  29 |     })
  30 |   })

  at Object.toContain (e2e/app-dir/scss/webpack-error/webpack-error.test.ts:27:29)

pnpm test-start-rspack test/production/pnpm-support/index.test.ts(rspack)

  • pnpm support > should execute client-side JS on each page in output: "standalone"
Expand output

● pnpm support › should execute client-side JS on each page in output: "standalone"

next build failed with code/signal 1

  74 |             if (code || signal)
  75 |               reject(
> 76 |                 new Error(
     |                 ^
  77 |                   `next build failed with code/signal ${code || signal}`
  78 |                 )
  79 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:76:17)

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

  • Cache Components Errors > Dev > Sync Dynamic Request > cookies > should show a redbox with a sync access error and a runtime error
  • Cache Components Errors > Dev > Sync Dynamic Request > cookies at runtime > should show a redbox with a sync access error and a runtime error
  • Cache Components Errors > Dev > Sync Dynamic Request > draftMode > should show a collapsed redbox with a sync access error
  • Cache Components Errors > Dev > Sync Dynamic Request > headers > should show a redbox with a sync access error and a runtime error
  • Cache Components Errors > Dev > Sync Dynamic Request > headers at runtime > should show a redbox with a sync access error and a runtime error
Expand output

● Cache Components Errors › Dev › Sync Dynamic Request › cookies › should show a redbox with a sync access error and a runtime error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Dev Sync Dynamic Request cookies should show a redbox with a sync access error and a runtime error 1`

- Snapshot  - 6
+ Received  + 6

  [
    {
      "description": "Route "/sync-cookies" used `cookies().get`. `cookies()` returns a Promise and must be unwrapped with `await` or `React.use()` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",
      "environmentLabel": "Prerender",
      "label": "Console Error",
-     "source": "app/sync-cookies/page.tsx (17:25) @ CookiesReadingComponent
- > 17 |   const token = (cookies() as any).get('token')
+     "source": "app/sync-cookies/page.tsx (18:25) @ CookiesReadingComponent
+ > 18 |   const token = (cookies() as any).get('token')
       |                         ^",
      "stack": [
-       "CookiesReadingComponent app/sync-cookies/page.tsx (17:25)",
+       "CookiesReadingComponent app/sync-cookies/page.tsx (18:25)",
        "Page app/sync-cookies/page.tsx (11:7)",
      ],
    },
    {
      "description": "(0 , <webpack-module-id>.cookies)(...).get is not a function",
      "environmentLabel": "Prerender",
      "label": "Runtime TypeError",
-     "source": "app/sync-cookies/page.tsx (17:36) @ CookiesReadingComponent
- > 17 |   const token = (cookies() as any).get('token')
+     "source": "app/sync-cookies/page.tsx (18:36) @ CookiesReadingComponent
+ > 18 |   const token = (cookies() as any).get('token')
       |                                    ^",
      "stack": [
-       "CookiesReadingComponent app/sync-cookies/page.tsx (17:36)",
+       "CookiesReadingComponent app/sync-cookies/page.tsx (18:36)",
      ],
    },
  ]

  1194 |               `)
  1195 |             } else if (isRspack) {
> 1196 |               await expect(browser).toDisplayRedbox(`
       |                                     ^
  1197 |                [
  1198 |                  {
  1199 |                    "description": "Route "/sync-cookies" used \`cookies().get\`. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",

  at Object.toDisplayRedbox (e2e/app-dir/cache-components-errors/cache-components-errors.test.ts:1196:37)

● Cache Components Errors › Dev › Sync Dynamic Request › cookies at runtime › should show a redbox with a sync access error and a runtime error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Dev Sync Dynamic Request cookies at runtime should show a redbox with a sync access error and a runtime error 1`

- Snapshot  - 3
+ Received  + 3

@@ -13,13 +13,13 @@
    },
    {
      "description": "(0 , <webpack-module-id>.cookies)(...).get is not a function",
      "environmentLabel": "Server",
      "label": "Runtime TypeError",
-     "source": "app/sync-cookies-runtime/page.tsx (24:66) @ CookiesReadingComponent
+     "source": "app/sync-cookies-runtime/page.tsx (24:36) @ CookiesReadingComponent
  > 24 |   const token = (cookies() as any).get('token')
-      |                                                                  ^",
+      |                                    ^",
      "stack": [
-       "CookiesReadingComponent app/sync-cookies-runtime/page.tsx (24:66)",
+       "CookiesReadingComponent app/sync-cookies-runtime/page.tsx (24:36)",
      ],
    },
  ]

  1376 |               `)
  1377 |             } else if (isRspack) {
> 1378 |               await expect(browser).toDisplayRedbox(`
       |                                     ^
  1379 |                [
  1380 |                  {
  1381 |                    "description": "Route "/sync-cookies-runtime" used \`cookies().get\`. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",

  at Object.toDisplayRedbox (e2e/app-dir/cache-components-errors/cache-components-errors.test.ts:1378:37)

● Cache Components Errors › Dev › Sync Dynamic Request › draftMode › should show a collapsed redbox with a sync access error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Dev Sync Dynamic Request draftMode should show a collapsed redbox with a sync access error 1`

- Snapshot  - 3
+ Received  + 3

  {
    "description": "Route "/sync-draft-mode" used `draftMode().isEnabled`. `draftMode()` returns a Promise and must be unwrapped with `await` or `React.use()` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",
    "environmentLabel": "Prerender",
    "label": "Console Error",
-   "source": "app/sync-draft-mode/page.tsx (23:31) @ DraftModeReadingComponent
- > 23 |   const isEnabled = (draftMode() as any)
+   "source": "app/sync-draft-mode/page.tsx (24:31) @ DraftModeReadingComponent
+ > 24 |   const isEnabled = (draftMode() as any).isEnabled
       |                               ^",
    "stack": [
-     "DraftModeReadingComponent app/sync-draft-mode/page.tsx (23:31)",
+     "DraftModeReadingComponent app/sync-draft-mode/page.tsx (24:31)",
      "Page app/sync-draft-mode/page.tsx (13:7)",
    ],
  }

  1471 |               `)
  1472 |             } else if (isRspack) {
> 1473 |               await expect(browser).toDisplayCollapsedRedbox(`
       |                                     ^
  1474 |                {
  1475 |                  "description": "Route "/sync-draft-mode" used \`draftMode().isEnabled\`. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",
  1476 |                  "environmentLabel": "Prerender",

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

● Cache Components Errors › Dev › Sync Dynamic Request › headers › should show a redbox with a sync access error and a runtime error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Dev Sync Dynamic Request headers should show a redbox with a sync access error and a runtime error 1`

- Snapshot  - 7
+ Received  + 7

  [
    {
      "description": "Route "/sync-headers" used `headers().get`. `headers()` returns a Promise and must be unwrapped with `await` or `React.use()` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",
      "environmentLabel": "Prerender",
      "label": "Console Error",
-     "source": "app/sync-headers/page.tsx (17:29) @ HeadersReadingComponent
- > 17 |   const userAgent = (headers() as any).get(
+     "source": "app/sync-headers/page.tsx (18:29) @ HeadersReadingComponent
+ > 18 |   const userAgent = (headers() as any).get('user-agent')
       |                             ^",
      "stack": [
-       "HeadersReadingComponent app/sync-headers/page.tsx (17:29)",
+       "HeadersReadingComponent app/sync-headers/page.tsx (18:29)",
        "Page app/sync-headers/page.tsx (11:7)",
      ],
    },
    {
      "description": "(0 , <webpack-module-id>.headers)(...).get is not a function",
      "environmentLabel": "Prerender",
      "label": "Runtime TypeError",
-     "source": "app/sync-headers/page.tsx (17:70) @ HeadersReadingComponent
- > 17 |   const userAgent = (headers() as any).get(
-      |                                                                      ^",
+     "source": "app/sync-headers/page.tsx (18:40) @ HeadersReadingComponent
+ > 18 |   const userAgent = (headers() as any).get('user-agent')
+      |                                        ^",
      "stack": [
-       "HeadersReadingComponent app/sync-headers/page.tsx (17:70)",
+       "HeadersReadingComponent app/sync-headers/page.tsx (18:40)",
      ],
    },
  ]

  1545 |               `)
  1546 |             } else if (isRspack) {
> 1547 |               await expect(browser).toDisplayRedbox(`
       |                                     ^
  1548 |                [
  1549 |                  {
  1550 |                    "description": "Route "/sync-headers" used \`headers().get\`. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",

  at Object.toDisplayRedbox (e2e/app-dir/cache-components-errors/cache-components-errors.test.ts:1547:37)

● Cache Components Errors › Dev › Sync Dynamic Request › headers at runtime › should show a redbox with a sync access error and a runtime error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Dev Sync Dynamic Request headers at runtime should show a redbox with a sync access error and a runtime error 1`

- Snapshot  - 5
+ Received  + 5

@@ -2,24 +2,24 @@
    {
      "description": "Route "/sync-headers-runtime" used `headers().get`. `headers()` returns a Promise and must be unwrapped with `await` or `React.use()` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",
      "environmentLabel": "Server",
      "label": "Console Error",
      "source": "app/sync-headers-runtime/page.tsx (24:29) @ HeadersReadingComponent
- > 24 |   const userAgent = (headers() as any).get(
+ > 24 |   const userAgent = (headers() as any).get('user-agent')
       |                             ^",
      "stack": [
        "HeadersReadingComponent app/sync-headers-runtime/page.tsx (24:29)",
        "Page app/sync-headers-runtime/page.tsx (14:9)",
      ],
    },
    {
      "description": "(0 , <webpack-module-id>.headers)(...).get is not a function",
      "environmentLabel": "Server",
      "label": "Runtime TypeError",
-     "source": "app/sync-headers-runtime/page.tsx (24:70) @ HeadersReadingComponent
- > 24 |   const userAgent = (headers() as any).get(
-      |                                                                      ^",
+     "source": "app/sync-headers-runtime/page.tsx (24:40) @ HeadersReadingComponent
+ > 24 |   const userAgent = (headers() as any).get('user-agent')
+      |                                        ^",
      "stack": [
-       "HeadersReadingComponent app/sync-headers-runtime/page.tsx (24:70)",
+       "HeadersReadingComponent app/sync-headers-runtime/page.tsx (24:40)",
      ],
    },
  ]

  1727 |               `)
  1728 |             } else if (isRspack) {
> 1729 |               await expect(browser).toDisplayRedbox(`
       |                                     ^
  1730 |                [
  1731 |                  {
  1732 |                    "description": "Route "/sync-headers-runtime" used \`headers().get\`. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis",

  at Object.toDisplayRedbox (e2e/app-dir/cache-components-errors/cache-components-errors.test.ts:1729:37)

pnpm test test/integration/telemetry/test/config.test.js

  • config telemetry > production mode > emits telemetry for lint during build (DD)
  • config telemetry > production mode > emits telemery for usage of image, script & dynamic (DD)
Expand output

● config telemetry › production mode › emits telemetry for lint during build

TypeError: Cannot read properties of null (reading 'pop')

  176 |         try {
  177 |           const event1 = /NEXT_LINT_CHECK_COMPLETED[\s\S]+?{([\s\S}]+?)^}/m
> 178 |             .exec(stderr)
      |                   ^
  179 |             .pop()
  180 |
  181 |           expect(event1).toMatch(/"durationInSeconds": [\d]{1,}/)

  at Object.stderr (integration/telemetry/test/config.test.js:178:19)

● config telemetry › production mode › emits telemery for usage of image, script & dynamic

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

Expected: ArrayContaining [{"featureName": "next/image", "invocationCount": 2}, {"featureName": "next/script", "invocationCount": 1}, {"featureName": "next/dynamic", "invocationCount": 1}]
Received: [{"featureName": "build-lint", "invocationCount": 1}, {"featureName": "vercelImageGeneration", "invocationCount": 1}, {"featureName": "vercelImageGeneration", "invocationCount": 0}]

  284 |
  285 |           // eslint-disable-next-line jest/no-standalone-expect
> 286 |           expect(featureUsageEvents).toEqual(
      |                                      ^
  287 |             expect.arrayContaining([
  288 |               {
  289 |                 featureName: 'next/image',

  at Object.toEqual (integration/telemetry/test/config.test.js:286:38)

@ijjk
Copy link
Member

ijjk commented Jul 23, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
buildDuration 19.3s 16.6s N/A
buildDurationCached 15.6s 12.6s N/A
nodeModulesSize 453 MB 453 MB N/A
nextStartRea..uration (ms) 697ms 696ms N/A
Client Bundles (main, webpack)
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
234bef07-HASH.js gzip 55 kB 55 kB N/A
3414-HASH.js gzip 4.32 kB 4.32 kB N/A
5194.HASH.js gzip 169 B 169 B
8863-HASH.js gzip 5.32 kB 5.32 kB N/A
9304-HASH.js gzip 46.3 kB 45.8 kB N/A
framework-HASH.js gzip 57.7 kB 57.7 kB N/A
main-app-HASH.js gzip 261 B 258 B N/A
main-HASH.js gzip 37.1 kB 36.8 kB N/A
webpack-HASH.js gzip 1.71 kB 1.72 kB N/A
Overall change 169 B 169 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Netail/next.js fix/css-order-side-effect 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 Netail/next.js fix/css-order-side-effect Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
amp-HASH.js gzip 502 B 507 B N/A
css-HASH.js gzip 335 B 333 B N/A
dynamic-HASH.js gzip 1.83 kB 1.83 kB N/A
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 350 B 352 B N/A
hooks-HASH.js gzip 385 B 383 B N/A
image-HASH.js gzip 581 B 580 B N/A
index-HASH.js gzip 257 B 259 B N/A
link-HASH.js gzip 2.29 kB 2.29 kB N/A
routerDirect..HASH.js gzip 320 B 318 B N/A
script-HASH.js gzip 387 B 386 B N/A
withRouter-HASH.js gzip 315 B 313 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 543 B 543 B
Client Build Manifests
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
_buildManifest.js gzip 770 B 770 B
Overall change 770 B 770 B
Rendered Page Sizes
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
index.html gzip 524 B 521 B N/A
link.html gzip 538 B 534 B N/A
withRouter.html gzip 520 B 517 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
edge-ssr.js gzip 121 kB 122 kB ⚠️ +494 B
page.js gzip 242 kB 241 kB N/A
Overall change 121 kB 122 kB ⚠️ +494 B
Middleware size
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
middleware-b..fest.js gzip 687 B 692 B N/A
middleware-r..fest.js gzip 156 B 155 B N/A
middleware.js gzip 33.2 kB 33.2 kB N/A
edge-runtime..pack.js gzip 853 B 853 B
Overall change 853 B 853 B
Next Runtimes
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
app-page-exp...dev.js gzip 289 kB 289 kB N/A
app-page-exp..prod.js gzip 159 kB 159 kB
app-page-tur...dev.js gzip 289 kB 289 kB N/A
app-page-tur..prod.js gzip 159 kB 159 kB
app-page-tur...dev.js gzip 277 kB 277 kB N/A
app-page-tur..prod.js gzip 153 kB 153 kB
app-page.run...dev.js gzip 277 kB 277 kB N/A
app-page.run..prod.js gzip 153 kB 153 kB
app-route-ex...dev.js gzip 69.9 kB 69.9 kB
app-route-ex..prod.js gzip 49.2 kB 49.2 kB
app-route-tu...dev.js gzip 70 kB 70 kB
app-route-tu..prod.js gzip 49.2 kB 49.2 kB
app-route-tu...dev.js gzip 69.4 kB 69.4 kB
app-route-tu..prod.js gzip 48.9 kB 48.9 kB
app-route.ru...dev.js gzip 69.3 kB 69.3 kB
app-route.ru..prod.js gzip 48.8 kB 48.8 kB
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 328 B 328 B
dist_client_...dev.js gzip 320 B 320 B
dist_client_...dev.js gzip 318 B 318 B
pages-api-tu...dev.js gzip 42.9 kB 42.9 kB
pages-api-tu..prod.js gzip 33 kB 33 kB
pages-api.ru...dev.js gzip 42.9 kB 42.9 kB
pages-api.ru..prod.js gzip 33 kB 33 kB
pages-turbo....dev.js gzip 53.1 kB 53.1 kB
pages-turbo...prod.js gzip 40.5 kB 40.5 kB
pages.runtim...dev.js gzip 53.3 kB 53.3 kB
pages.runtim..prod.js gzip 40.6 kB 40.6 kB
server.runti..prod.js gzip 78.3 kB 78.3 kB
Overall change 1.52 MB 1.52 MB
build cache Overall increase ⚠️
vercel/next.js canary Netail/next.js fix/css-order-side-effect Change
0.pack gzip 3.13 MB 3.13 MB ⚠️ +8.41 kB
index.pack gzip 96 kB 96.1 kB N/A
Overall change 3.13 MB 3.13 MB ⚠️ +8.41 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js
failed to diff
Diff for _buildManifest.js
@@ -611,36 +611,36 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-a7fb71e5f6213aa9.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-83b2a509a0b9c757.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-8f4e796cc66bb887.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-8e77a606b9d019c5.js",
     ],
-    "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-97249b00762d04b9.js"],
+    "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-a04ba0067f799193.js"],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-30fd1831d1c5954d.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-0279d0110e068d1a.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-933632969493a23b.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-e432a0f7ba47eef6.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-fbde6d2b170ddc8a.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-f0b84fb3e319371e.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-0fcabd05d9a7b019.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-52423902769dcda6.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-b8972ec893a56b94.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-6570b393a963ea44.js"],
     "/image": [
-      "static\u002Fchunks\u002F3414-0fcfc359d1626bc2.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-bcf65fa5afa25af3.js",
+      "static\u002Fchunks\u002F4432-c8e5dfe2f921fb0c.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-23954b3487dfbbf5.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-107187295a8a4aea.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-36ccfe0043e39af2.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1422147417dba74a.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-9ec1276f3d297a75.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-a68c215ba4b2c288.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-ab9f96cca4438f11.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-0af6fb4f6ceaec8e.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-eac400d15d279196.js",
     ],
     sortedPages: [
       "\u002F",
Diff for _app-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [636],
   {
-    /***/ 4467: /***/ (
+    /***/ 8573: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,10 +9,11 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_app",
         function () {
-          return __webpack_require__(6191);
+          return __webpack_require__(9155);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
@@ -25,7 +26,7 @@
     /******/ __webpack_require__.O(
       0,
       [6593, 8792],
-      () => (__webpack_exec__(4467), __webpack_exec__(6567))
+      () => (__webpack_exec__(8573), __webpack_exec__(1355))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for _error-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2731],
   {
-    /***/ 6349: /***/ (
+    /***/ 3591: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,10 +9,11 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_error",
         function () {
-          return __webpack_require__(6442);
+          return __webpack_require__(3870);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
@@ -23,7 +24,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6349)
+      __webpack_exec__(3591)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for amp-HASH.js
@@ -1,17 +1,66 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5034],
   {
-    /***/ 4105: /***/ (
+    /***/ 6212: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ config: () => /* binding */ config,
+        /* harmony export */ default: () => /* binding */ Amp,
+        /* harmony export */
+      });
+      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(7023);
+      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_amp__WEBPACK_IMPORTED_MODULE_0__
+        );
+
+      const config = {
+        amp: "hybrid",
+      };
+      function Amp(props) {
+        return (0, next_amp__WEBPACK_IMPORTED_MODULE_0__.useAmp)()
+          ? "AMP mode"
+          : "normal mode";
+      }
+
+      /***/
+    },
+
+    /***/ 7023: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4642);
+      module.exports = __webpack_require__(9926);
+
+      /***/
+    },
+
+    /***/ 8647: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/amp",
+        function () {
+          return __webpack_require__(6212);
+        },
+      ]);
+      if (false) {
+        // removed by dead control flow
+      }
 
       /***/
     },
 
-    /***/ 4642: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9926: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -27,8 +76,8 @@
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(5977)
       );
-      const _ampcontextsharedruntime = __webpack_require__(8358);
-      const _ampmode = __webpack_require__(242);
+      const _ampcontextsharedruntime = __webpack_require__(5418);
+      const _ampmode = __webpack_require__(3494);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampmode.isInAmpMode)(
@@ -49,61 +98,13 @@
 
       /***/
     },
-
-    /***/ 5261: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/amp",
-        function () {
-          return __webpack_require__(9550);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 9550: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ config: () => /* binding */ config,
-        /* harmony export */ default: () => /* binding */ Amp,
-        /* harmony export */
-      });
-      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(4105);
-      /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_amp__WEBPACK_IMPORTED_MODULE_0__
-        );
-
-      const config = {
-        amp: "hybrid",
-      };
-      function Amp(props) {
-        return (0, next_amp__WEBPACK_IMPORTED_MODULE_0__.useAmp)()
-          ? "AMP mode"
-          : "normal mode";
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(5261)
+      __webpack_exec__(8647)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for css-HASH.js
@@ -1,7 +1,14 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9813],
   {
-    /***/ 5267: /***/ (
+    /***/ 1978: /***/ (module) => {
+      // extracted by mini-css-extract-plugin
+      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
+
+      /***/
+    },
+
+    /***/ 6941: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -15,7 +22,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(6320);
+        __webpack_require__(1978);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -35,14 +42,7 @@
       /***/
     },
 
-    /***/ 6320: /***/ (module) => {
-      // extracted by mini-css-extract-plugin
-      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
-      /***/
-    },
-
-    /***/ 9643: /***/ (
+    /***/ 8685: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -50,10 +50,11 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function () {
-          return __webpack_require__(5267);
+          return __webpack_require__(6941);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
@@ -64,7 +65,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9643)
+      __webpack_exec__(8685)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,17 +1,63 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 2406: /***/ (
-      module,
-      __unused_webpack_exports,
+    /***/ 2839: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(8949);
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(7765);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(7444);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1376)
+            .then(__webpack_require__.bind(__webpack_require__, 1376))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1376],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4466: /***/ (
+    /***/ 4478: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -53,7 +99,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(5977)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(8452);
+      const _loadablecontextsharedruntime = __webpack_require__(5792);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -108,6 +154,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         }
         // Server only
         if (false) {
+          // removed by dead control flow
         }
         // Client only
         if (!initialized && "object" !== "undefined") {
@@ -288,63 +335,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 4545: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(7765);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2406);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 5194)
-            .then(__webpack_require__.bind(__webpack_require__, 5194))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 5194],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
-
-      /***/
-    },
-
-    /***/ 8452: /***/ (
+    /***/ 5792: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -366,29 +357,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       );
       const LoadableContext = _react.default.createContext(null);
       if (false) {
+        // removed by dead control flow
       } //# sourceMappingURL=loadable-context.shared-runtime.js.map
 
       /***/
     },
 
-    /***/ 8931: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(4545);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8949: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6153: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -421,7 +396,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         __webpack_require__(5977)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(4466)
+        __webpack_require__(4478)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -458,6 +433,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
             let { error, isLoading, pastDelay } = param;
             if (!pastDelay) return null;
             if (false) {
+              // removed by dead control flow
             }
             return null;
           },
@@ -521,13 +497,41 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7444: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(6153);
+
+      /***/
+    },
+
+    /***/ 9805: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(2839);
+        },
+      ]);
+      if (false) {
+        // removed by dead control flow
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8931)
+      __webpack_exec__(9805)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 4717: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(7776);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7776: /***/ (
+    /***/ 170: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -37,13 +20,31 @@
 
       /***/
     },
+
+    /***/ 8079: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(170);
+        },
+      ]);
+      if (false) {
+        // removed by dead control flow
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4717)
+      __webpack_exec__(8079)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 943: /***/ (
+    /***/ 1177: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(2554);
+      module.exports = __webpack_require__(8366);
 
       /***/
     },
 
-    /***/ 3829: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4662);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4662: /***/ (
+    /***/ 1992: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(943);
+        __webpack_require__(1177);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,31 @@
 
       /***/
     },
+
+    /***/ 8751: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(1992);
+        },
+      ]);
+      if (false) {
+        // removed by dead control flow
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3829)
+      __webpack_exec__(8751)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,7 +1,25 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9804],
   {
-    /***/ 2452: /***/ (
+    /***/ 2227: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/hooks",
+        function () {
+          return __webpack_require__(2770);
+        },
+      ]);
+      if (false) {
+        // removed by dead control flow
+      }
+
+      /***/
+    },
+
+    /***/ 2770: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -59,30 +77,13 @@
 
       /***/
     },
-
-    /***/ 6105: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/hooks",
-        function () {
-          return __webpack_require__(2452);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6105)
+      __webpack_exec__(2227)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2983],
   {
-    /***/ 1002: /***/ (
+    /***/ 3473: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -18,8 +18,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(7765);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
-      var next_image = __webpack_require__(3414);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
+      var next_image = __webpack_require__(4432);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -49,7 +49,7 @@
       /***/
     },
 
-    /***/ 4023: /***/ (
+    /***/ 8401: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -57,10 +57,11 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(1002);
+          return __webpack_require__(3473);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
@@ -70,8 +71,8 @@
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ __webpack_require__.O(0, [3414, 636, 6593, 8792], () =>
-      __webpack_exec__(4023)
+    /******/ __webpack_require__.O(0, [4432, 636, 6593, 8792], () =>
+      __webpack_exec__(8401)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 40: /***/ (
+    /***/ 7386: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,7 +20,7 @@
       /***/
     },
 
-    /***/ 4931: /***/ (
+    /***/ 9053: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -28,10 +28,11 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/",
         function () {
-          return __webpack_require__(40);
+          return __webpack_require__(7386);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
@@ -42,7 +43,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4931)
+      __webpack_exec__(9053)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,143 +1,63 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 1585: /***/ (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__(5977);
-      const _requestidlecallback = __webpack_require__(356);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection(param) {
-        let { rootRef, rootMargin, disabled } = param;
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef == null ? void 0 : rootRef.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
+    /***/ 2783: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(5926);
 
       /***/
     },
 
-    /***/ 2621: /***/ (
-      module,
-      __unused_webpack_exports,
+    /***/ 4174: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(5410);
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(7765);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(2783);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_link__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      function aLink(props) {
+        return /*#__PURE__*/ (0,
+        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
+          children: [
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
+              children: "A Link page!",
+            }),
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
+              {
+                href: "/",
+                children: "Go to /",
+              }
+            ),
+          ],
+        });
+      }
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
 
       /***/
     },
 
-    /***/ 5410: /***/ (module, exports, __webpack_require__) => {
+    /***/ 5926: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -164,19 +84,20 @@
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(5977)
       );
-      const _resolvehref = __webpack_require__(224);
-      const _islocalurl = __webpack_require__(7746);
-      const _formaturl = __webpack_require__(315);
-      const _utils = __webpack_require__(8709);
-      const _addlocale = __webpack_require__(6358);
-      const _routercontextsharedruntime = __webpack_require__(4095);
-      const _useintersection = __webpack_require__(1585);
-      const _getdomainlocale = __webpack_require__(8802);
-      const _addbasepath = __webpack_require__(6151);
-      const _usemergedref = __webpack_require__(9100);
+      const _resolvehref = __webpack_require__(6708);
+      const _islocalurl = __webpack_require__(6526);
+      const _formaturl = __webpack_require__(5575);
+      const _utils = __webpack_require__(3497);
+      const _addlocale = __webpack_require__(722);
+      const _routercontextsharedruntime = __webpack_require__(1235);
+      const _useintersection = __webpack_require__(8069);
+      const _getdomainlocale = __webpack_require__(9734);
+      const _addbasepath = __webpack_require__(4419);
+      const _usemergedref = __webpack_require__(6136);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
+          // removed by dead control flow
         }
         if (!(0, _islocalurl.isLocalURL)(href)) {
           return;
@@ -204,6 +125,7 @@
         // want to force navigation since this is only a prefetch
         router.prefetch(href, as, options).catch((err) => {
           if (false) {
+            // removed by dead control flow
           }
         });
       }
@@ -308,6 +230,7 @@
           );
           const prefetchEnabled = prefetchProp !== false;
           if (false) {
+            // removed by dead control flow
           }
           const { href, as } = _react.default.useMemo(() => {
             if (!router) {
@@ -332,6 +255,7 @@
           const previousHref = _react.default.useRef(href);
           const previousAs = _react.default.useRef(as);
           if (false) {
+            // removed by dead control flow
           }
           const [setIntersectionRef, isVisible, resetVisible] = (0,
           _useintersection.useIntersection)({
@@ -357,6 +281,7 @@
           _react.default.useEffect(() => {
             // in dev, we only prefetch on hover to avoid wasting resources as the prefetch will trigger compiling the page.
             if (false) {
+              // removed by dead control flow
             }
             if (!router) {
               return;
@@ -495,43 +420,7 @@
       /***/
     },
 
-    /***/ 8802: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "getDomainLocale", {
-        enumerable: true,
-        get: function () {
-          return getDomainLocale;
-        },
-      });
-      const _normalizetrailingslash = __webpack_require__(1652);
-      const basePath =
-        /* unused pure expression or super */ null && (false || "");
-      function getDomainLocale(path, locale, locales, domainLocales) {
-        if (false) {
-        } else {
-          return false;
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=get-domain-locale.js.map
-
-      /***/
-    },
-
-    /***/ 9100: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6136: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -609,7 +498,7 @@
       /***/
     },
 
-    /***/ 9693: /***/ (
+    /***/ 7047: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -617,57 +506,175 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/link",
         function () {
-          return __webpack_require__(9948);
+          return __webpack_require__(4174);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
     },
 
-    /***/ 9948: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
+    /***/ 8069: /***/ (module, exports, __webpack_require__) => {
       "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
       });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(7765);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2621);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_link__WEBPACK_IMPORTED_MODULE_1__
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(5977);
+      const _requestidlecallback = __webpack_require__(3432);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
         );
-
-      function aLink(props) {
-        return /*#__PURE__*/ (0,
-        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
-          children: [
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
-              children: "A Link page!",
-            }),
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
-              {
-                href: "/",
-                children: "Go to /",
-              }
-            ),
-          ],
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection(param) {
+        let { rootRef, rootMargin, disabled } = param;
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef == null ? void 0 : rootRef.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
         });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 9734: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "getDomainLocale", {
+        enumerable: true,
+        get: function () {
+          return getDomainLocale;
+        },
+      });
+      const _normalizetrailingslash = __webpack_require__(504);
+      const basePath =
+        /* unused pure expression or super */ null && (false || "");
+      function getDomainLocale(path, locale, locales, domainLocales) {
+        if (false) {
+          // removed by dead control flow
+        } else {
+          return false;
+        }
       }
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=get-domain-locale.js.map
 
       /***/
     },
@@ -677,7 +684,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9693)
+      __webpack_exec__(7047)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 7157: /***/ (
+    /***/ 431: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,26 +9,27 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(8044);
+          return __webpack_require__(5506);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
     },
 
-    /***/ 7372: /***/ (
+    /***/ 882: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(6567);
+      module.exports = __webpack_require__(1355);
 
       /***/
     },
 
-    /***/ 8044: /***/ (
+    /***/ 5506: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +44,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7372);
+        __webpack_require__(882);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -68,7 +69,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(7157)
+      __webpack_exec__(431)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,7 +1,35 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 3699: /***/ (
+    /***/ 1008: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(2817);
+
+      /***/
+    },
+
+    /***/ 6951: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(8889);
+        },
+      ]);
+      if (false) {
+        // removed by dead control flow
+      }
+
+      /***/
+    },
+
+    /***/ 8889: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +44,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4802);
+        __webpack_require__(1008);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -48,40 +76,13 @@
 
       /***/
     },
-
-    /***/ 4802: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(8661);
-
-      /***/
-    },
-
-    /***/ 7861: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(3699);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(7861)
+      __webpack_exec__(6951)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 3453: /***/ (
+    /***/ 111: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,26 +9,27 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/withRouter",
         function () {
-          return __webpack_require__(8241);
+          return __webpack_require__(5339);
         },
       ]);
       if (false) {
+        // removed by dead control flow
       }
 
       /***/
     },
 
-    /***/ 7372: /***/ (
+    /***/ 882: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(6567);
+      module.exports = __webpack_require__(1355);
 
       /***/
     },
 
-    /***/ 8241: /***/ (
+    /***/ 5339: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +44,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(7765);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7372);
+        __webpack_require__(882);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -67,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3453)
+      __webpack_exec__(111)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 3414-HASH.js

Diff too large to display

Diff for 8863-HASH.js
@@ -1,8 +1,34 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [8863],
+  [7009],
   {
-    /***/ 22: /***/ (module, exports, __webpack_require__) => {
+    /***/ 414: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "AmpStateContext", {
+        enumerable: true,
+        get: function () {
+          return AmpStateContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(2726);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2224)
+      );
+      const AmpStateContext = _react.default.createContext({});
+      if (false) {
+        // removed by dead control flow
+      } //# sourceMappingURL=amp-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 1912: /***/ (module, exports, __webpack_require__) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
@@ -12,7 +38,7 @@
           return useMergedRef;
         },
       });
-      const _react = __webpack_require__(2786);
+      const _react = __webpack_require__(2224);
       function useMergedRef(refA, refB) {
         const cleanupA = (0, _react.useRef)(null);
         const cleanupB = (0, _react.useRef)(null);
@@ -78,7 +104,95 @@
       /***/
     },
 
-    /***/ 639: /***/ (__unused_webpack_module, exports) => {
+    /***/ 2843: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "RouterContext", {
+        enumerable: true,
+        get: function () {
+          return RouterContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(2726);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2224)
+      );
+      const RouterContext = _react.default.createContext(null);
+      if (false) {
+        // removed by dead control flow
+      } //# sourceMappingURL=router-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 3003: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return _default;
+        },
+      });
+      const _findclosestquality = __webpack_require__(5045);
+      function defaultLoader(param) {
+        let { config, src, width, quality } = param;
+        if (false) {
+          // removed by dead control flow
+        }
+        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
+
+      /***/
+    },
+
+    /***/ 3810: /***/ (__unused_webpack_module, exports) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "isInAmpMode", {
+        enumerable: true,
+        get: function () {
+          return isInAmpMode;
+        },
+      });
+      function isInAmpMode(param) {
+        let {
+          ampFirst = false,
+          hybrid = false,
+          hasQuery = false,
+        } = param === void 0 ? {} : param;
+        return ampFirst || (hybrid && hasQuery);
+      } //# sourceMappingURL=amp-mode.js.map
+
+      /***/
+    },
+
+    /***/ 5045: /***/ (__unused_webpack_module, exports) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
@@ -109,56 +223,7 @@
       /***/
     },
 
-    /***/ 936: /***/ (__unused_webpack_module, exports) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      0 && 0;
-      function _export(target, all) {
-        for (var name in all)
-          Object.defineProperty(target, name, {
-            enumerable: true,
-            get: all[name],
-          });
-      }
-      _export(exports, {
-        VALID_LOADERS: function () {
-          return VALID_LOADERS;
-        },
-        imageConfigDefault: function () {
-          return imageConfigDefault;
-        },
-      });
-      const VALID_LOADERS = [
-        "default",
-        "imgix",
-        "cloudinary",
-        "akamai",
-        "custom",
-      ];
-      const imageConfigDefault = {
-        deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-        imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
-        path: "/_next/image",
-        loader: "default",
-        loaderFile: "",
-        domains: [],
-        disableStaticImages: false,
-        minimumCacheTTL: 14400,
-        formats: ["image/webp"],
-        dangerouslyAllowSVG: false,
-        contentSecurityPolicy: "script-src 'none'; frame-src 'none'; sandbox;",
-        contentDispositionType: "attachment",
-        localPatterns: undefined,
-        remotePatterns: [],
-        qualities: [75],
-        unoptimized: false,
-      }; //# sourceMappingURL=image-config.js.map
-
-      /***/
-    },
-
-    /***/ 1268: /***/ (__unused_webpack_module, exports) => {
+    /***/ 5218: /***/ (__unused_webpack_module, exports) => {
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
        */
@@ -212,7 +277,7 @@
       /***/
     },
 
-    /***/ 1796: /***/ (module, exports, __webpack_require__) => {
+    /***/ 5402: /***/ (module, exports, __webpack_require__) => {
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
         value: true,
@@ -233,19 +298,19 @@
           return defaultHead;
         },
       });
-      const _interop_require_default = __webpack_require__(8182);
-      const _interop_require_wildcard = __webpack_require__(8319);
-      const _jsxruntime = __webpack_require__(1050);
+      const _interop_require_default = __webpack_require__(2726);
+      const _interop_require_wildcard = __webpack_require__(2527);
+      const _jsxruntime = __webpack_require__(8204);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(2786)
+        __webpack_require__(2224)
       );
       const _sideeffect = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5581)
+        __webpack_require__(9319)
       );
-      const _ampcontextsharedruntime = __webpack_require__(3800);
-      const _headmanagercontextsharedruntime = __webpack_require__(4950);
-      const _ampmode = __webpack_require__(7824);
-      const _warnonce = __webpack_require__(2854);
+      const _ampcontextsharedruntime = __webpack_require__(414);
+      const _headmanagercontextsharedruntime = __webpack_require__(3100);
+      const _ampmode = __webpack_require__(3810);
+      const _warnonce = __webpack_require__(4504);
       function defaultHead(inAmpMode) {
         if (inAmpMode === void 0) inAmpMode = false;
         const head = [
@@ -370,6 +435,7 @@
           .map((c, i) => {
             const key = c.key || i;
             if (false) {
+              // removed by dead control flow
             }
             return /*#__PURE__*/ _react.default.cloneElement(c, {
               key,
@@ -410,7 +476,7 @@
       /***/
     },
 
-    /***/ 2843: /***/ (
+    /***/ 6745: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -424,9 +490,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(2854);
-      const _imageblursvg = __webpack_require__(1268);
-      const _imageconfig = __webpack_require__(936);
+      const _warnonce = __webpack_require__(4504);
+      const _imageblursvg = __webpack_require__(5218);
+      const _imageconfig = __webpack_require__(9278);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -760,6 +826,7 @@
         }
         const qualityInt = getInt(quality);
         if (false) {
+          // removed by dead control flow
           var _config_localPatterns;
         }
         const imgStyle = Object.assign(
@@ -814,6 +881,7 @@
             }
           : {};
         if (false) {
+          // removed by dead control flow
         }
         const imgAttributes = generateImgAttrs({
           config,
@@ -826,6 +894,7 @@
         });
         const loadingFinal = isLazy ? "lazy" : loading;
         if (false) {
+          // removed by dead control flow
         }
         const props = {
           ...rest,
@@ -858,239 +927,7 @@
       /***/
     },
 
-    /***/ 3800: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "AmpStateContext", {
-        enumerable: true,
-        get: function () {
-          return AmpStateContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(8182);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2786)
-      );
-      const AmpStateContext = _react.default.createContext({});
-      if (false) {
-      } //# sourceMappingURL=amp-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 5581: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return SideEffect;
-        },
-      });
-      const _react = __webpack_require__(2786);
-      const isServer = "object" === "undefined";
-      const useClientOnlyLayoutEffect = isServer
-        ? () => {}
-        : _react.useLayoutEffect;
-      const useClientOnlyEffect = isServer ? () => {} : _react.useEffect;
-      function SideEffect(props) {
-        const { headManager, reduceComponentsToState } = props;
-        function emitChange() {
-          if (headManager && headManager.mountedInstances) {
-            const headElements = _react.Children.toArray(
-              Array.from(headManager.mountedInstances).filter(Boolean)
-            );
-            headManager.updateHead(
-              reduceComponentsToState(headElements, props)
-            );
-          }
-        }
-        if (isServer) {
-          var _headManager_mountedInstances;
-          headManager == null
-            ? void 0
-            : (_headManager_mountedInstances = headManager.mountedInstances) ==
-              null
-            ? void 0
-            : _headManager_mountedInstances.add(props.children);
-          emitChange();
-        }
-        useClientOnlyLayoutEffect(() => {
-          var _headManager_mountedInstances;
-          headManager == null
-            ? void 0
-            : (_headManager_mountedInstances = headManager.mountedInstances) ==
-              null
-            ? void 0
-            : _headManager_mountedInstances.add(props.children);
-          return () => {
-            var _headManager_mountedInstances;
-            headManager == null
-              ? void 0
-              : (_headManager_mountedInstances =
-                  headManager.mountedInstances) == null
-              ? void 0
-              : _headManager_mountedInstances.delete(props.children);
-          };
-        });
-        // We need to call `updateHead` method whenever the `SideEffect` is trigger in all
-        // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s
-        // being rendered, we only trigger the method from the last one.
-        // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`
-        // singleton in the layout effect pass, and actually trigger it in the effect pass.
-        useClientOnlyLayoutEffect(() => {
-          if (headManager) {
-            headManager._pendingUpdate = emitChange;
-          }
-          return () => {
-            if (headManager) {
-              headManager._pendingUpdate = emitChange;
-            }
-          };
-        });
-        useClientOnlyEffect(() => {
-          if (headManager && headManager._pendingUpdate) {
-            headManager._pendingUpdate();
-            headManager._pendingUpdate = null;
-          }
-          return () => {
-            if (headManager && headManager._pendingUpdate) {
-              headManager._pendingUpdate();
-              headManager._pendingUpdate = null;
-            }
-          };
-        });
-        return null;
-      } //# sourceMappingURL=side-effect.js.map
-
-      /***/
-    },
-
-    /***/ 7053: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "RouterContext", {
-        enumerable: true,
-        get: function () {
-          return RouterContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(8182);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2786)
-      );
-      const RouterContext = _react.default.createContext(null);
-      if (false) {
-      } //# sourceMappingURL=router-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 7281: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return _default;
-        },
-      });
-      const _findclosestquality = __webpack_require__(639);
-      function defaultLoader(param) {
-        let { config, src, width, quality } = param;
-        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
-
-      /***/
-    },
-
-    /***/ 7480: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "ImageConfigContext", {
-        enumerable: true,
-        get: function () {
-          return ImageConfigContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(8182);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2786)
-      );
-      const _imageconfig = __webpack_require__(936);
-      const ImageConfigContext = _react.default.createContext(
-        _imageconfig.imageConfigDefault
-      );
-      if (false) {
-      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 7824: /***/ (__unused_webpack_module, exports) => {
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "isInAmpMode", {
-        enumerable: true,
-        get: function () {
-          return isInAmpMode;
-        },
-      });
-      function isInAmpMode(param) {
-        let {
-          ampFirst = false,
-          hybrid = false,
-          hasQuery = false,
-        } = param === void 0 ? {} : param;
-        return ampFirst || (hybrid && hasQuery);
-      } //# sourceMappingURL=amp-mode.js.map
-
-      /***/
-    },
-
-    /***/ 8863: /***/ (module, exports, __webpack_require__) => {
+    /***/ 7009: /***/ (module, exports, __webpack_require__) => {
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
         value: true,
@@ -1101,27 +938,27 @@
           return Image;
         },
       });
-      const _interop_require_default = __webpack_require__(8182);
-      const _interop_require_wildcard = __webpack_require__(8319);
-      const _jsxruntime = __webpack_require__(1050);
+      const _interop_require_default = __webpack_require__(2726);
+      const _interop_require_wildcard = __webpack_require__(2527);
+      const _jsxruntime = __webpack_require__(8204);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(2786)
+        __webpack_require__(2224)
       );
       const _reactdom = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(1407)
+        __webpack_require__(1345)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(1796)
+        __webpack_require__(5402)
       );
-      const _getimgprops = __webpack_require__(2843);
-      const _imageconfig = __webpack_require__(936);
-      const _imageconfigcontextsharedruntime = __webpack_require__(7480);
-      const _warnonce = __webpack_require__(2854);
-      const _routercontextsharedruntime = __webpack_require__(7053);
+      const _getimgprops = __webpack_require__(6745);
+      const _imageconfig = __webpack_require__(9278);
+      const _imageconfigcontextsharedruntime = __webpack_require__(9690);
+      const _warnonce = __webpack_require__(4504);
+      const _routercontextsharedruntime = __webpack_require__(2843);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(7281)
+        __webpack_require__(3003)
       );
-      const _usemergedref = __webpack_require__(22);
+      const _usemergedref = __webpack_require__(1912);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -1133,6 +970,7 @@
         unoptimized: false,
       };
       if (false) {
+        // removed by dead control flow
       }
       // See https://stackoverflow.com/q/39777833/266535 for why we use this ref
       // handler instead of the img's onLoad attribute.
@@ -1198,6 +1036,7 @@
             onLoadingCompleteRef.current(img);
           }
           if (false) {
+            // removed by dead control flow
           }
         });
       }
@@ -1254,6 +1093,7 @@
                 img.src = img.src;
               }
               if (false) {
+                // removed by dead control flow
               }
               if (img.complete) {
                 handleLoading(
@@ -1447,5 +1287,176 @@
 
       /***/
     },
+
+    /***/ 9278: /***/ (__unused_webpack_module, exports) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        VALID_LOADERS: function () {
+          return VALID_LOADERS;
+        },
+        imageConfigDefault: function () {
+          return imageConfigDefault;
+        },
+      });
+      const VALID_LOADERS = [
+        "default",
+        "imgix",
+        "cloudinary",
+        "akamai",
+        "custom",
+      ];
+      const imageConfigDefault = {
+        deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
+        imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
+        path: "/_next/image",
+        loader: "default",
+        loaderFile: "",
+        domains: [],
+        disableStaticImages: false,
+        minimumCacheTTL: 14400,
+        formats: ["image/webp"],
+        dangerouslyAllowSVG: false,
+        contentSecurityPolicy: "script-src 'none'; frame-src 'none'; sandbox;",
+        contentDispositionType: "attachment",
+        localPatterns: undefined,
+        remotePatterns: [],
+        qualities: [75],
+        unoptimized: false,
+      }; //# sourceMappingURL=image-config.js.map
+
+      /***/
+    },
+
+    /***/ 9319: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return SideEffect;
+        },
+      });
+      const _react = __webpack_require__(2224);
+      const isServer = "object" === "undefined";
+      const useClientOnlyLayoutEffect = isServer
+        ? () => {}
+        : _react.useLayoutEffect;
+      const useClientOnlyEffect = isServer ? () => {} : _react.useEffect;
+      function SideEffect(props) {
+        const { headManager, reduceComponentsToState } = props;
+        function emitChange() {
+          if (headManager && headManager.mountedInstances) {
+            const headElements = _react.Children.toArray(
+              Array.from(headManager.mountedInstances).filter(Boolean)
+            );
+            headManager.updateHead(
+              reduceComponentsToState(headElements, props)
+            );
+          }
+        }
+        if (isServer) {
+          var _headManager_mountedInstances;
+          headManager == null
+            ? void 0
+            : (_headManager_mountedInstances = headManager.mountedInstances) ==
+              null
+            ? void 0
+            : _headManager_mountedInstances.add(props.children);
+          emitChange();
+        }
+        useClientOnlyLayoutEffect(() => {
+          var _headManager_mountedInstances;
+          headManager == null
+            ? void 0
+            : (_headManager_mountedInstances = headManager.mountedInstances) ==
+              null
+            ? void 0
+            : _headManager_mountedInstances.add(props.children);
+          return () => {
+            var _headManager_mountedInstances;
+            headManager == null
+              ? void 0
+              : (_headManager_mountedInstances =
+                  headManager.mountedInstances) == null
+              ? void 0
+              : _headManager_mountedInstances.delete(props.children);
+          };
+        });
+        // We need to call `updateHead` method whenever the `SideEffect` is trigger in all
+        // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s
+        // being rendered, we only trigger the method from the last one.
+        // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`
+        // singleton in the layout effect pass, and actually trigger it in the effect pass.
+        useClientOnlyLayoutEffect(() => {
+          if (headManager) {
+            headManager._pendingUpdate = emitChange;
+          }
+          return () => {
+            if (headManager) {
+              headManager._pendingUpdate = emitChange;
+            }
+          };
+        });
+        useClientOnlyEffect(() => {
+          if (headManager && headManager._pendingUpdate) {
+            headManager._pendingUpdate();
+            headManager._pendingUpdate = null;
+          }
+          return () => {
+            if (headManager && headManager._pendingUpdate) {
+              headManager._pendingUpdate();
+              headManager._pendingUpdate = null;
+            }
+          };
+        });
+        return null;
+      } //# sourceMappingURL=side-effect.js.map
+
+      /***/
+    },
+
+    /***/ 9690: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "ImageConfigContext", {
+        enumerable: true,
+        get: function () {
+          return ImageConfigContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(2726);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2224)
+      );
+      const _imageconfig = __webpack_require__(9278);
+      const ImageConfigContext = _react.default.createContext(
+        _imageconfig.imageConfigDefault
+      );
+      if (false) {
+        // removed by dead control flow
+      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
+
+      /***/
+    },
   },
 ]);
Diff for 9304-HASH.js

Diff too large to display

Diff for framework-HASH.js
@@ -7,7 +7,7 @@
       exports,
       __webpack_require__
     ) => {
-      /* provided dependency */ var process = __webpack_require__(1279);
+      /* provided dependency */ var process = __webpack_require__(1581);
       /**
        * @license React
        * react-dom-client.production.js
@@ -16407,7 +16407,8 @@
     ) => {
       if (true) {
         module.exports = __webpack_require__(1608);
-      } else {
+      } // removed by dead control flow
+      else {
       }
 
       /***/
@@ -16789,6 +16790,7 @@
           return;
         }
         if (false) {
+          // removed by dead control flow
         }
         try {
           // Verify that the code above has been dead code eliminated (DCE'd).
@@ -16805,7 +16807,8 @@
         // DevTools can report bad minification during injection.
         checkDCE();
         module.exports = __webpack_require__(8789);
-      } else {
+      } // removed by dead control flow
+      else {
       }
 
       /***/
@@ -16825,6 +16828,7 @@
           return;
         }
         if (false) {
+          // removed by dead control flow
         }
         try {
           // Verify that the code above has been dead code eliminated (DCE'd).
@@ -16841,7 +16845,8 @@
         // DevTools can report bad minification during injection.
         checkDCE();
         module.exports = __webpack_require__(153);
-      } else {
+      } // removed by dead control flow
+      else {
       }
 
       /***/
@@ -16854,7 +16859,8 @@
     ) => {
       if (true) {
         module.exports = __webpack_require__(6500);
-      } else {
+      } // removed by dead control flow
+      else {
       }
 
       /***/
@@ -16865,7 +16871,7 @@
       exports,
       __webpack_require__
     ) => {
-      /* provided dependency */ var process = __webpack_require__(1279);
+      /* provided dependency */ var process = __webpack_require__(1581);
       /**
        * @license React
        * react.production.js
@@ -17485,7 +17491,8 @@
     ) => {
       if (true) {
         module.exports = __webpack_require__(7555);
-      } else {
+      } // removed by dead control flow
+      else {
       }
 
       /***/
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,67 +1,67 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 3228: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
-
-    /***/ 9181: /***/ (
+    /***/ 1779: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2673, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3319, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4710, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3564, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9138, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4932, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1049, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5963, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9207, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4549, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4379, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3877, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 631, 23)
+        __webpack_require__.t.bind(__webpack_require__, 6769, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3798, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7356, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6231, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5521, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4706, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9520, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7121, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5947, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6594, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1720, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2231)
+        __webpack_require__.bind(__webpack_require__, 977)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9683, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7569, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 174, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1504, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3496, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4186, 23)
       );
 
       /***/
     },
+
+    /***/ 3550: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -69,8 +69,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [5862, 9304],
-      () => (__webpack_exec__(7007), __webpack_exec__(9181))
+      [3008, 2426],
+      () => (__webpack_exec__(6401), __webpack_exec__(1779))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for webpack-HASH.js
@@ -143,7 +143,8 @@
       ];
       /******/ for (
         var current = mode & 2 && value;
-        typeof current == "object" && !~leafPrototypes.indexOf(current);
+        (typeof current == "object" || typeof current == "function") &&
+        !~leafPrototypes.indexOf(current);
         current = getProto(current)
       ) {
         /******/ Object.getOwnPropertyNames(current).forEach(
@@ -205,7 +206,7 @@
     /******/ __webpack_require__.u = (chunkId) => {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "eff68912667abe92" + ".js"
+        "static/chunks/" + chunkId + "." + "96bfb3136c2883da" + ".js"
       );
       /******/
     };
Commit: 0029509

@Netail
Copy link
Contributor Author

Netail commented Jul 23, 2025

Thanks for fixing the types @huozhi.

Interesting to see the client bundle being increased by quite a bit.

@Netail Netail force-pushed the fix/css-order-side-effect branch 6 times, most recently from b5e3cb4 to 97e91ff Compare July 30, 2025 22:47
@Netail Netail force-pushed the fix/css-order-side-effect branch 2 times, most recently from cde8c4c to 3f236ab Compare August 11, 2025 12:02
@Netail Netail force-pushed the fix/css-order-side-effect branch 3 times, most recently from cdaace3 to 90f2465 Compare August 11, 2025 12:41
@Netail
Copy link
Contributor Author

Netail commented Aug 11, 2025

Something's broken, but can't quite put my finger on it

@Netail Netail force-pushed the fix/css-order-side-effect branch 3 times, most recently from 125dff6 to f03bed9 Compare August 15, 2025 08:15
@alexander-akait
Copy link
Contributor

@Netail Do you need help here? If yes can you provide what exactly is broken and how to reproduce, we will look at this, thanks

@Netail
Copy link
Contributor Author

Netail commented Aug 18, 2025

@Netail Do you need help here? If yes can you provide what exactly is broken and how to reproduce, we will look at this, thanks

Oh hey Alexander! Well it's mainly about the tests not passing, with several different issues. E.g. "sass" or "css-loader" not being found and HMR or hydration not working. It's not one specific error that occurs for every test, so I assume it something over-arching. Could also be related to any of the NextJS webpack plugins, which is outside of my knowledge

@Netail Netail force-pushed the fix/css-order-side-effect branch 3 times, most recently from ab1d4f7 to 7431de1 Compare August 26, 2025 14:57
Copy link

codspeed-hq bot commented Aug 26, 2025

CodSpeed Performance Report

Merging #81685 will create unknown performance changes

Comparing Netail:fix/css-order-side-effect (ef1b812) with canary (c071e85)

Summary

⁉️ 9 dropped benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Benchmark BASE HEAD Change
⁉️ build[date-fns-all] 2.2 s N/A N/A
⁉️ build[date-fns-single] 1.3 s N/A N/A
⁉️ build[framer-motion-all] 3.1 s N/A N/A
⁉️ build[framer-motion-single] 2.2 s N/A N/A
⁉️ build[joy] 2.1 s N/A N/A
⁉️ build[lucide-react-all] 8.9 s N/A N/A
⁉️ build[lucide-react-single] 896.6 ms N/A N/A
⁉️ build[mui] 3.2 s N/A N/A
⁉️ build[shiki] 6 s N/A N/A

@Netail
Copy link
Contributor Author

Netail commented Aug 26, 2025

@alexander-akait

Tested some stuff with the logging, the cache item serialization log didn't even come from the format-webpack-messages, it was already logged before. It seems like closing the compiler logs the errors here, while NextJS prefers to format & log these themself using the returned stats

@Netail Netail force-pushed the fix/css-order-side-effect branch from 7431de1 to de1795b Compare August 26, 2025 19:31
@ijjk ijjk added the tests label Aug 26, 2025
@Netail Netail force-pushed the fix/css-order-side-effect branch from de1795b to 3d2f64f Compare August 26, 2025 19:43
@ijjk ijjk added the Documentation Related to Next.js' official documentation. label Aug 26, 2025
@Netail Netail force-pushed the fix/css-order-side-effect branch 3 times, most recently from 451f6f5 to ef1b812 Compare August 27, 2025 08:10
@alexander-akait
Copy link
Contributor

@Netail Any things where we can help you here? Looks like CI is almost green

@alexander-akait
Copy link
Contributor

To use Next.js' built-in Sass support, you first need to install sass.
Run npm i sass or yarn add sass inside your workspace.

Do you bundle sass-loader? Maybe in some tests sass is not installed? I see most of problem here

@Netail
Copy link
Contributor Author

Netail commented Aug 29, 2025

To use Next.js' built-in Sass support, you first need to install sass.
Run npm i sass or yarn add sass inside your workspace.

Do you bundle sass-loader? Maybe in some tests sass is not installed? I see most of problem here

Correct, that's expected. They are tests for returning a prettier error message (in case sass is not installed) to the user instead of the default webpack errors from the stats, but seems like webpack by default now also logs an error message due to trying to cache the HookWebpackError. So it now displays a cache saving error, then the formatted webpack log

But first working on getting sass-loader to v16; #83091 due to it being a breaking change of nextjs users. Nice to get in for the next major nextjs release

@alexander-akait
Copy link
Contributor

Correct, that's expected. They are tests for returning a prettier error message (in case sass is not installed) to the user instead of the default webpack errors from the stats, but seems like webpack by default now also logs an error message due to trying to cache the HookWebpackError. So it now displays a cache saving error, then the formatted webpack log

Any help what we can do here?

@Netail
Copy link
Contributor Author

Netail commented Aug 29, 2025

Correct, that's expected. They are tests for returning a prettier error message (in case sass is not installed) to the user instead of the default webpack errors from the stats, but seems like webpack by default now also logs an error message due to trying to cache the HookWebpackError. So it now displays a cache saving error, then the formatted webpack log

Any help what we can do here?

For now, I am not sure if it's something related to NextJS or Webpack. But I am not part of the maintainers, so it's more a bit here and there on the side 😅

@Netail Netail force-pushed the fix/css-order-side-effect branch 3 times, most recently from 37db2b1 to 444bee2 Compare September 26, 2025 23:05
@Netail Netail force-pushed the fix/css-order-side-effect branch from 444bee2 to 0029509 Compare September 30, 2025 11:55
@Netail Netail changed the title bump [email protected] (fix css sideEffects order) bump [email protected] (fix css sideEffects order) Sep 30, 2025
@Netail Netail force-pushed the fix/css-order-side-effect branch from 0029509 to 1d9bf56 Compare October 6, 2025 14:52
@alexander-akait
Copy link
Contributor

@Netail looks like types are failed somewhere, is it a bug on our side, can you check?

@Netail Netail force-pushed the fix/css-order-side-effect branch from 1d9bf56 to 6de4ae5 Compare October 6, 2025 18:34
@Netail
Copy link
Contributor Author

Netail commented Oct 6, 2025

@Netail looks like types are failed somewhere, is it a bug on our side, can you check?

I think on NextJS' side, will take a look

if (!fallbackCompiler) {
throw new Error('No webpack compiler')
}

Copy link
Contributor

Choose a reason for hiding this comment

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

Missing null check for webpack compiler creation. The code adds null checks for two other getWebpackBundler() calls but misses this third location, which will crash when accessing .compilers[0] if the compiler is null.

View Details
📝 Patch Details
diff --git a/packages/next/src/server/dev/hot-reloader-webpack.ts b/packages/next/src/server/dev/hot-reloader-webpack.ts
index b9c8715e1a..08f366eee7 100644
--- a/packages/next/src/server/dev/hot-reloader-webpack.ts
+++ b/packages/next/src/server/dev/hot-reloader-webpack.ts
@@ -1200,6 +1200,10 @@ export default class HotReloaderWebpack implements NextJsHotReloaderInterface {
       this.activeWebpackConfigs
     ) as unknown as webpack.MultiCompiler
 
+    if (!this.multiCompiler) {
+      throw new Error('No webpack compiler')
+    }
+
     // Copy over the filesystem so that it is shared between all compilers.
     const inputFileSystem = this.multiCompiler.compilers[0].inputFileSystem
     for (const compiler of this.multiCompiler.compilers) {

Analysis

Inconsistent null check for webpack compiler creation in hot-reloader-webpack.ts

What fails: Missing defensive null check for getWebpackBundler() call at line 1199 in hot-reloader-webpack.ts, causing inconsistent error handling compared to similar patterns in the same file and in compiler.ts.

Context: A commit ddb54d36cb titled "fix typings" added null checks with error message "No webpack compiler" to two locations:

  • src/build/compiler.ts line 57
  • src/server/dev/hot-reloader-webpack.ts line 799 (fallbackCompiler)

However, a third location with the identical pattern at line 1199 was not updated:

this.multiCompiler = getWebpackBundler()(this.activeWebpackConfigs) as unknown as webpack.MultiCompiler
// Immediately accesses this.multiCompiler.compilers[0] without null check

Why this matters: While webpack() should always return a Compiler/MultiCompiler when called without a callback (per webpack Node API docs), the codebase established a pattern of defensive null checking for this scenario. The inconsistency means:

  • If an unexpected failure occurs, two locations will throw clear "No webpack compiler" errors
  • The third location will crash with a less informative "Cannot read property 'compilers' of null/undefined" error

Fix: Added the same null check pattern to maintain consistency across all three getWebpackBundler() invocations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI approved Approve running CI for fork Documentation Related to Next.js' official documentation. Rspack tests Turbopack Related to Turbopack with Next.js. type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants