Skip to content

next-dev: Emit next.config.js warnings from child process upon restart#84000

Closed
bgw wants to merge 1 commit intocanaryfrom
bgw/reload-config-on-dev-server-restart
Closed

next-dev: Emit next.config.js warnings from child process upon restart#84000
bgw wants to merge 1 commit intocanaryfrom
bgw/reload-config-on-dev-server-restart

Conversation

@bgw
Copy link
Copy Markdown
Member

@bgw bgw commented Sep 19, 2025

This is a minor edge case. If you modify the next.config.js, we restart the dev server. When that happens, we should re-emit warnings about your configuration, in case you've added new options that are deprecated.

However, we don't currently do this, because we normally let the parent process emit the warnings, and the parent process does not restart.

This adds logic to let the child process know when it's being started as part of a restart, and log the warnings itself in that case.

I tested this in #84006. I'm abandoning that PR, but I still think this is an improvement.

Closes PACK-5533

@bgw bgw changed the title next-dev: Reload config in parent process when dev server restarts next-dev: Emit next.config.js warnings from child process upon restart Sep 19, 2025
@bgw bgw force-pushed the bgw/reload-config-on-dev-server-restart branch from 55e7bcd to e30346a Compare September 19, 2025 19:48
@ijjk
Copy link
Copy Markdown
Member

ijjk commented Sep 19, 2025

Failing test suites

Commit: 7a50ee8 | About building and testing Next.js

pnpm test-dev-turbo test/development/config-validation/index.test.ts (turbopack)

  • config validation - validation only runs once > should validate config only once in root process (DD)
Expand output

● config validation - validation only runs once › should validate config only once in root process

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

Expected substring: "Invalid next.config.js options detected"
Received string:    "   ▲ Next.js 15.6.0-canary.21 (Turbopack)
   - Local:        http://localhost:34773
   - Network:      http://176.9.53.189:34773·
 ✓ Starting...
Creating turbopack project {
  dir: '/tmp/next-install-98fba0c3e95a90881e3dfcaf70810995400549e3b33091b9940b6ecb28778a41',
  testMode: true
}
 ✓ Ready in 474ms
 ○ Compiling / ...
 ✓ Compiled / in 2.1s
"

  41 |
  42 |     // Expect validation to have occurred
> 43 |     expect(output).toContain('Invalid next.config.js options detected')
     |                    ^
  44 |     expect(output).toContain('invalidOption')
  45 |     expect(output).toContain('anotherBadKey')
  46 |

  at Object.toContain (development/config-validation/index.test.ts:43:20)

pnpm test test/integration/config-experimental-warning/test/index.test.js (turbopack)

  • Config Experimental Warning > production mode > should show unrecognized experimental features in warning but not in start log experiments section (DD)
Expand output

● Config Experimental Warning › production mode › should show unrecognized experimental features in warning but not in start log experiments section

TIMED OUT: undefined

undefined

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

Expected substring: "Unrecognized key(s) in object: 'appDir' at \"experimental\""
Received string:    ""

  753 |
  754 |   if (hardError) {
> 755 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  756 |   }
  757 |   return false
  758 | }

  at check (lib/next-test-utils.ts:755:11)
  at Object.<anonymous> (integration/config-experimental-warning/test/index.test.js:244:9)

pnpm test test/integration/image-optimizer/test/index.test.ts (turbopack)

  • Image Optimizer > config checks > should error when domains length exceeds 50 (DD)
  • Image Optimizer > config checks > should error when localPatterns length exceeds 25 (DD)
  • Image Optimizer > config checks > should error when localPatterns has invalid prop (DD)
  • Image Optimizer > config checks > should error when remotePatterns length exceeds 50 (DD)
  • Image Optimizer > config checks > should error when remotePatterns has invalid prop (DD)
  • Image Optimizer > config checks > should error when remotePatterns is missing hostname (DD)
  • Image Optimizer > config checks > should error when sizes length exceeds 25 (DD)
  • Image Optimizer > config checks > should error when deviceSizes contains invalid widths (DD)
  • Image Optimizer > config checks > should error when imageSizes contains invalid widths (DD)
  • Image Optimizer > config checks > should error when qualities length exceeds 20 (DD)
  • Image Optimizer > config checks > should error when qualities array has a value thats not an integer (DD)
  • Image Optimizer > config checks > should error when qualities array is empty (DD)
  • Image Optimizer > config checks > should error when loader contains invalid value (DD)
  • Image Optimizer > config checks > should error when images.formats contains invalid values (DD)
  • Image Optimizer > config checks > should error when images.dangerouslyAllowSVG is not a boolean (DD)
  • Image Optimizer > config checks > should error when images.contentSecurityPolicy is not a string (DD)
  • Image Optimizer > config checks > should error when images.remotePatterns is invalid (DD)
  • Image Optimizer > config checks > should error when images.contentDispositionType is not valid (DD)
  • Image Optimizer > config checks > should error when images.minimumCacheTTL is not valid (DD)
  • Image Optimizer > config checks > should error when images.unoptimized is not a boolean (DD)
Expand output

● Image Optimizer › config checks › should error when domains length exceeds 50

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

Expected substring: "Array must contain at most 50 element(s) at \"images.domains\""
Received string:    ""

  44 |       await nextConfig.restore()
  45 |
> 46 |       expect(stderr).toContain(
     |                      ^
  47 |         'Array must contain at most 50 element(s) at "images.domains"'
  48 |       )
  49 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:46:22)

● Image Optimizer › config checks › should error when localPatterns length exceeds 25

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

Expected substring: "Array must contain at most 25 element(s) at \"images.localPatterns\""
Received string:    ""

  71 |       await nextConfig.restore()
  72 |
> 73 |       expect(stderr).toContain(
     |                      ^
  74 |         'Array must contain at most 25 element(s) at "images.localPatterns"'
  75 |       )
  76 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:73:22)

● Image Optimizer › config checks › should error when localPatterns has invalid prop

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

Expected substring: "Unrecognized key(s) in object: 'foo' at \"images.localPatterns[0]\""
Received string:    ""

   96 |       await nextConfig.restore()
   97 |
>  98 |       expect(stderr).toContain(
      |                      ^
   99 |         `Unrecognized key(s) in object: 'foo' at "images.localPatterns[0]"`
  100 |       )
  101 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:98:22)

● Image Optimizer › config checks › should error when remotePatterns length exceeds 50

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

Expected substring: "Array must contain at most 50 element(s) at \"images.remotePatterns\""
Received string:    ""

  123 |       await nextConfig.restore()
  124 |
> 125 |       expect(stderr).toContain(
      |                      ^
  126 |         'Array must contain at most 50 element(s) at "images.remotePatterns"'
  127 |       )
  128 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:125:22)

● Image Optimizer › config checks › should error when remotePatterns has invalid prop

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

Expected substring: "Unrecognized key(s) in object: 'foo' at \"images.remotePatterns[0]\""
Received string:    ""

  148 |       await nextConfig.restore()
  149 |
> 150 |       expect(stderr).toContain(
      |                      ^
  151 |         `Unrecognized key(s) in object: 'foo' at "images.remotePatterns[0]"`
  152 |       )
  153 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:150:22)

● Image Optimizer › config checks › should error when remotePatterns is missing hostname

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

Expected substring: "\"images.remotePatterns[0].hostname\" is missing, expected string"
Received string:    "FATAL: An unexpected Turbopack error occurred:
failed to parse next.config.js: {·
Caused by:
- images.remotePatterns[0]: missing field `hostname` at line 63 column 7·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [
        {
          \"protocol\": \"https\"
        }
      ],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.remotePatterns[0]: missing field `hostname` at line 63 column 7
Error [TurbopackInternalError]: failed to parse next.config.js: {·
Caused by:
- images.remotePatterns[0]: missing field `hostname` at line 63 column 7·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [
        {
          \"protocol\": \"https\"
        }
      ],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.remotePatterns[0]: missing field `hostname` at line 63 column 7
    at <unknown> (TurbopackInternalError: failed to parse next.config.js: {) {
  location: undefined
}
"

  173 |       await nextConfig.restore()
  174 |
> 175 |       expect(stderr).toContain(
      |                      ^
  176 |         `"images.remotePatterns[0].hostname" is missing, expected string`
  177 |       )
  178 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:175:22)

● Image Optimizer › config checks › should error when sizes length exceeds 25

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

Expected substring: "Array must contain at most 25 element(s) at \"images.deviceSizes\""
Received string:    ""

  198 |       await nextConfig.restore()
  199 |
> 200 |       expect(stderr).toContain(
      |                      ^
  201 |         `Array must contain at most 25 element(s) at "images.deviceSizes"`
  202 |       )
  203 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:200:22)

● Image Optimizer › config checks › should error when deviceSizes contains invalid widths

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

Expected substring: "Number must be greater than or equal to 1 at \"images.deviceSizes[0]\""
Received string:    ""

  223 |       await nextConfig.restore()
  224 |
> 225 |       expect(stderr).toContain(
      |                      ^
  226 |         'Number must be greater than or equal to 1 at "images.deviceSizes[0]"'
  227 |       )
  228 |       expect(stderr).toContain(

  at Object.toContain (integration/image-optimizer/test/index.test.ts:225:22)

● Image Optimizer › config checks › should error when imageSizes contains invalid widths

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

Expected substring: "Number must be greater than or equal to 1 at \"images.imageSizes[0]\""
Received string:    ""

  251 |       await nextConfig.restore()
  252 |
> 253 |       expect(stderr).toContain(
      |                      ^
  254 |         'Number must be greater than or equal to 1 at "images.imageSizes[0]"'
  255 |       )
  256 |       expect(stderr).toContain(

  at Object.toContain (integration/image-optimizer/test/index.test.ts:253:22)

● Image Optimizer › config checks › should error when qualities length exceeds 20

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

Expected substring: "Array must contain at most 20 element(s) at \"images.qualities\""
Received string:    ""

  282 |       await nextConfig.restore()
  283 |
> 284 |       expect(stderr).toContain(
      |                      ^
  285 |         `Array must contain at most 20 element(s) at "images.qualities"`
  286 |       )
  287 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:284:22)

● Image Optimizer › config checks › should error when qualities array has a value thats not an integer

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

Expected substring: "Expected integer, received float at \"images.qualities[3]\""
Received string:    ""

  307 |       await nextConfig.restore()
  308 |
> 309 |       expect(stderr).toContain(
      |                      ^
  310 |         `Expected integer, received float at "images.qualities[3]"`
  311 |       )
  312 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:309:22)

● Image Optimizer › config checks › should error when qualities array is empty

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

Expected substring: "Array must contain at least 1 element(s) at \"images.qualities\""
Received string:    ""

  332 |       await nextConfig.restore()
  333 |
> 334 |       expect(stderr).toContain(
      |                      ^
  335 |         `Array must contain at least 1 element(s) at "images.qualities"`
  336 |       )
  337 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:334:22)

● Image Optimizer › config checks › should error when loader contains invalid value

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

Expected substring: "Expected 'default' | 'imgix' | 'cloudinary' | 'akamai' | 'custom', received 'notreal' at \"images.loader\""
Received string:    "/root/actions-runner/_work/next.js/next.js/packages/next/src/server/config.ts:531
      throw new Error(
            ^··
Error: Specified images.loader property (notreal) also requires images.path property to be assigned to a URL prefix.
See more info here: https://nextjs.org/docs/api-reference/next/legacy/image#loader-configuration

  497 |         }
  498 |         if (images.loader !== 'default' && images.loader !== 'custom' && images.path === _imageconfig.imageConfigDefault.path) {
> 499 |             throw Object.defineProperty(new Error(`Specified images.loader property (${images.loader}) also requires images.path property to be assigned to a URL prefix.\nSee more info here: https://nextjs.org/docs/api-reference/next/legacy/image#loader-configuration`), "__NEXT_ERROR_CODE", {
      |                                         ^
  500 |                 value: "E228",
  501 |                 enumerable: false,
  502 |                 configurable: true

  at assignDefaultsAndValidate (../packages/next/dist/server/config.js:499:41)
  at loadConfig (../packages/next/dist/server/config.js:1200:32)
  at async Server.<anonymous> (../packages/next/dist/server/lib/start-server.js:286:28)·
  Node.js v20.9.0
  "
  at Object.toContain (integration/image-optimizer/test/index.test.ts:359:22)

● Image Optimizer › config checks › should error when images.formats contains invalid values

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

Expected substring: "Expected 'image/avif' | 'image/webp', received 'jpeg' at \"images.formats[1]\""
Received string:    "FATAL: An unexpected Turbopack error occurred:
failed to parse next.config.js: {·
Caused by:
- images.formats[1]: unknown variant `jpeg`, expected `image/webp` or `image/avif` at line 56 column 12·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/avif\",
        \"jpeg\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.formats[1]: unknown variant `jpeg`, expected `image/webp` or `image/avif` at line 56 column 12
Error [TurbopackInternalError]: failed to parse next.config.js: {·
Caused by:
- images.formats[1]: unknown variant `jpeg`, expected `image/webp` or `image/avif` at line 56 column 12·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/avif\",
        \"jpeg\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.formats[1]: unknown variant `jpeg`, expected `image/webp` or `image/avif` at line 56 column 12
    at <unknown> (TurbopackInternalError: failed to parse next.config.js: {) {
  location: undefined
}
"

  382 |       await nextConfig.restore()
  383 |
> 384 |       expect(stderr).toContain(
      |                      ^
  385 |         `Expected 'image/avif' | 'image/webp', received 'jpeg' at "images.formats[1]"`
  386 |       )
  387 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:384:22)

● Image Optimizer › config checks › should error when images.dangerouslyAllowSVG is not a boolean

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

Expected substring: "Expected boolean, received string at \"images.dangerouslyAllowSVG\""
Received string:    "FATAL: An unexpected Turbopack error occurred:
failed to parse next.config.js: {·
Caused by:
- images.dangerouslyAllowSVG: invalid type: string \"foo\", expected a boolean at line 57 column 32·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": \"foo\",
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.dangerouslyAllowSVG: invalid type: string \"foo\", expected a boolean at line 57 column 32
Error [TurbopackInternalError]: failed to parse next.config.js: {·
Caused by:
- images.dangerouslyAllowSVG: invalid type: string \"foo\", expected a boolean at line 57 column 32·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": \"foo\",
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.dangerouslyAllowSVG: invalid type: string \"foo\", expected a boolean at line 57 column 32
    at <unknown> (TurbopackInternalError: failed to parse next.config.js: {) {
  location: undefined
}
"

  482 |       await nextConfig.restore()
  483 |
> 484 |       expect(stderr).toContain(
      |                      ^
  485 |         `Expected boolean, received string at "images.dangerouslyAllowSVG"`
  486 |       )
  487 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:484:22)

● Image Optimizer › config checks › should error when images.contentSecurityPolicy is not a string

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

Expected substring: "Expected string, received number at \"images.contentSecurityPolicy\""
Received string:    "FATAL: An unexpected Turbopack error occurred:
failed to parse next.config.js: {·
Caused by:
- images.contentSecurityPolicy: invalid type: integer `1`, expected a string at line 58 column 30·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": 1,
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.contentSecurityPolicy: invalid type: integer `1`, expected a string at line 58 column 30
Error [TurbopackInternalError]: failed to parse next.config.js: {·
Caused by:
- images.contentSecurityPolicy: invalid type: integer `1`, expected a string at line 58 column 30·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": 1,
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.contentSecurityPolicy: invalid type: integer `1`, expected a string at line 58 column 30
    at <unknown> (TurbopackInternalError: failed to parse next.config.js: {) {
  location: undefined
}
"

  507 |       await nextConfig.restore()
  508 |
> 509 |       expect(stderr).toContain(
      |                      ^
  510 |         `Expected string, received number at "images.contentSecurityPolicy"`
  511 |       )
  512 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:509:22)

● Image Optimizer › config checks › should error when images.remotePatterns is invalid

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

Expected substring: "Expected array, received string at \"images.remotePatterns\""
Received string:    "/root/actions-runner/_work/next.js/next.js/packages/next/src/server/config.ts:462
        throw new Error(
              ^··
Error: Specified images.remotePatterns should be an Array received string.
See more info here: https://nextjs.org/docs/messages/invalid-images-config

  430 |             var _config_assetPrefix;
  431 |             if (!Array.isArray(images.remotePatterns)) {
> 432 |                 throw Object.defineProperty(new Error(`Specified images.remotePatterns should be an Array received ${typeof images.remotePatterns}.\nSee more info here: https://nextjs.org/docs/messages/invalid-images-config`), "__NEXT_ERROR_CODE", {
      |                                             ^
  433 |                     value: "E27",
  434 |                     enumerable: false,
  435 |                     configurable: true

  at assignDefaultsAndValidate (../packages/next/dist/server/config.js:432:45)
  at loadConfig (../packages/next/dist/server/config.js:1200:32)
  at async Server.<anonymous> (../packages/next/dist/server/lib/start-server.js:286:28)·
  Node.js v20.9.0
  "
  at Object.toContain (integration/image-optimizer/test/index.test.ts:565:22)

● Image Optimizer › config checks › should error when images.contentDispositionType is not valid

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

Expected substring: "Expected 'inline' | 'attachment', received 'nope' at \"images.contentDispositionType\""
Received string:    ""

  609 |       await nextConfig.restore()
  610 |
> 611 |       expect(stderr).toContain(
      |                      ^
  612 |         `Expected 'inline' | 'attachment', received 'nope' at "images.contentDispositionType"`
  613 |       )
  614 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:611:22)

● Image Optimizer › config checks › should error when images.minimumCacheTTL is not valid

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

Expected substring: "Number must be greater than or equal to 0 at \"images.minimumCacheTTL\""
Received string:    "FATAL: An unexpected Turbopack error occurred:
failed to parse next.config.js: {·
Caused by:
- images.minimumCacheTTL: invalid value: integer `-1`, expected u64 at line 53 column 25·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": -1,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.minimumCacheTTL: invalid value: integer `-1`, expected u64 at line 53 column 25
Error [TurbopackInternalError]: failed to parse next.config.js: {·
Caused by:
- images.minimumCacheTTL: invalid value: integer `-1`, expected u64 at line 53 column 25·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": -1,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": false
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.minimumCacheTTL: invalid value: integer `-1`, expected u64 at line 53 column 25
    at <unknown> (TurbopackInternalError: failed to parse next.config.js: {) {
  location: undefined
}
"

  634 |       await nextConfig.restore()
  635 |
> 636 |       expect(stderr).toContain(
      |                      ^
  637 |         `Number must be greater than or equal to 0 at "images.minimumCacheTTL"`
  638 |       )
  639 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:636:22)

● Image Optimizer › config checks › should error when images.unoptimized is not a boolean

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

Expected substring: "Expected boolean, received string at \"images.unoptimized\""
Received string:    "FATAL: An unexpected Turbopack error occurred:
failed to parse next.config.js: {·
Caused by:
- images.unoptimized: invalid type: string \"yup\", expected a boolean at line 64 column 24·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": \"yup\"
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.unoptimized: invalid type: string \"yup\", expected a boolean at line 64 column 24
Error [TurbopackInternalError]: failed to parse next.config.js: {·
Caused by:
- images.unoptimized: invalid type: string \"yup\", expected a boolean at line 64 column 24·
Debug info:
- Execution of ProjectContainer::project failed
- Execution of NextConfig::from_string failed
- failed to parse next.config.js: {
    \"env\": {},
    \"webpack\": null,
    \"eslint\": {
      \"ignoreDuringBuilds\": false
    },
    \"typescript\": {
      \"ignoreBuildErrors\": false
    },
    \"typedRoutes\": false,
    \"distDir\": \".next\",
    \"cleanDistDir\": true,
    \"assetPrefix\": \"\",
    \"cacheMaxMemorySize\": 52428800,
    \"configOrigin\": \"next.config.js\",
    \"useFileSystemPublicRoutes\": true,
    \"generateBuildId\": null,
    \"generateEtags\": true,
    \"pageExtensions\": [
      \"tsx\",
      \"ts\",
      \"jsx\",
      \"js\"
    ],
    \"poweredByHeader\": true,
    \"compress\": true,
    \"images\": {
      \"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\": 60,
      \"formats\": [
        \"image/webp\"
      ],
      \"dangerouslyAllowSVG\": false,
      \"contentSecurityPolicy\": \"script-src 'none'; frame-src 'none'; sandbox;\",
      \"contentDispositionType\": \"attachment\",
      \"remotePatterns\": [],
      \"qualities\": [
        75
      ],
      \"unoptimized\": \"yup\"
    },
    \"devIndicators\": {
      \"position\": \"bottom-left\"
    },
    \"onDemandEntries\": {
      \"maxInactiveAge\": 60000,
      \"pagesBufferLength\": 5
    },
    \"amp\": {
      \"canonicalBase\": \"\"
    },
    \"basePath\": \"\",
    \"sassOptions\": {},
    \"trailingSlash\": false,
    \"i18n\": null,
    \"productionBrowserSourceMaps\": false,
    \"excludeDefaultMomentLocales\": true,
    \"serverRuntimeConfig\": {},
    \"publicRuntimeConfig\": {},
    \"reactProductionProfiling\": false,
    \"reactStrictMode\": null,
    \"reactMaxHeadersLength\": 6000,
    \"httpAgentOptions\": {
      \"keepAlive\": true
    },
    \"logging\": {},
    \"compiler\": {},
    \"expireTime\": 31536000,
    \"staticPageGenerationTimeout\": 60,
    \"modularizeImports\": {
      \"@mui/icons-material\": {
        \"transform\": \"@mui/icons-material/{{member}}\"
      },
      \"lodash\": {
        \"transform\": \"lodash/{{member}}\"
      }
    },
    \"outputFileTracingRoot\": \"/root/actions-runner/_work/next.js/next.js\",
    \"experimental\": {
      \"useSkewCookie\": false,
      \"cacheLife\": {
        \"default\": {
          \"stale\": 300,
          \"revalidate\": 900,
          \"expire\": 4294967294
        },
        \"seconds\": {
          \"stale\": 30,
          \"revalidate\": 1,
          \"expire\": 60
        },
        \"minutes\": {
          \"stale\": 300,
          \"revalidate\": 60,
          \"expire\": 3600
        },
        \"hours\": {
          \"stale\": 300,
          \"revalidate\": 3600,
          \"expire\": 86400
        },
        \"days\": {
          \"stale\": 300,
          \"revalidate\": 86400,
          \"expire\": 604800
        },
        \"weeks\": {
          \"stale\": 300,
          \"revalidate\": 604800,
          \"expire\": 2592000
        },
        \"max\": {
          \"stale\": 300,
          \"revalidate\": 2592000,
          \"expire\": 4294967294
        }
      },
      \"cacheHandlers\": {},
      \"cssChunking\": true,
      \"multiZoneDraftMode\": false,
      \"appNavFailHandling\": false,
      \"prerenderEarlyExit\": true,
      \"serverMinification\": true,
      \"serverSourceMaps\": false,
      \"linkNoTouchStart\": false,
      \"caseSensitiveRoutes\": false,
      \"clientSegmentCache\": false,
      \"rdcForNavigations\": false,
      \"clientParamParsing\": false,
      \"dynamicOnHover\": false,
      \"preloadEntriesOnStart\": true,
      \"clientRouterFilter\": true,
      \"clientRouterFilterRedirects\": false,
      \"fetchCacheKeyPrefix\": \"\",
      \"middlewarePrefetch\": \"flexible\",
      \"optimisticClientCache\": true,
      \"manualClientBasePath\": false,
      \"cpus\": 19,
      \"memoryBasedWorkersCount\": false,
      \"imgOptConcurrency\": null,
      \"imgOptTimeoutInSeconds\": 7,
      \"imgOptMaxInputPixels\": 268402689,
      \"imgOptSequentialRead\": null,
      \"imgOptSkipMetadata\": null,
      \"isrFlushToDisk\": true,
      \"workerThreads\": false,
      \"optimizeCss\": false,
      \"nextScriptWorkers\": false,
      \"scrollRestoration\": false,
      \"externalDir\": false,
      \"disableOptimizedLoading\": false,
      \"gzipSize\": true,
      \"craCompat\": false,
      \"esmExternals\": true,
      \"fullySpecified\": false,
      \"swcTraceProfiling\": false,
      \"forceSwcTransforms\": false,
      \"largePageDataBytes\": 128000,
      \"typedEnv\": false,
      \"parallelServerCompiles\": false,
      \"parallelServerBuildTraces\": false,
      \"ppr\": false,
      \"authInterrupts\": false,
      \"webpackMemoryOptimizations\": false,
      \"optimizeServerReact\": true,
      \"viewTransition\": false,
      \"routerBFCache\": false,
      \"removeUncaughtErrorAndRejectionListeners\": false,
      \"validateRSCRequestHeaders\": true,
      \"staleTimes\": {
        \"dynamic\": 0,
        \"static\": 300
      },
      \"reactDebugChannel\": false,
      \"serverComponentsHmrCache\": true,
      \"staticGenerationMaxConcurrency\": 8,
      \"staticGenerationMinPagesPerWorker\": 25,
      \"cacheComponents\": false,
      \"inlineCss\": false,
      \"useCache\": false,
      \"globalNotFound\": false,
      \"browserDebugInfoInTerminal\": false,
      \"optimizeRouterScrolling\": false,
      \"isolatedDevBuild\": false,
      \"optimizePackageImports\": [
        \"lucide-react\",
        \"date-fns\",
        \"lodash-es\",
        \"ramda\",
        \"antd\",
        \"react-bootstrap\",
        \"ahooks\",
        \"@ant-design/icons\",
        \"@headlessui/react\",
        \"@headlessui-float/react\",
        \"@heroicons/react/20/solid\",
        \"@heroicons/react/24/solid\",
        \"@heroicons/react/24/outline\",
        \"@visx/visx\",
        \"@tremor/react\",
        \"rxjs\",
        \"@mui/material\",
        \"@mui/icons-material\",
        \"recharts\",
        \"react-use\",
        \"effect\",
        \"@effect/schema\",
        \"@effect/platform\",
        \"@effect/platform-node\",
        \"@effect/platform-browser\",
        \"@effect/platform-bun\",
        \"@effect/sql\",
        \"@effect/sql-mssql\",
        \"@effect/sql-mysql2\",
        \"@effect/sql-pg\",
        \"@effect/sql-sqlite-node\",
        \"@effect/sql-sqlite-bun\",
        \"@effect/sql-sqlite-wasm\",
        \"@effect/sql-sqlite-react-native\",
        \"@effect/rpc\",
        \"@effect/rpc-http\",
        \"@effect/typeclass\",
        \"@effect/experimental\",
        \"@effect/opentelemetry\",
        \"@material-ui/core\",
        \"@material-ui/icons\",
        \"@tabler/icons-react\",
        \"mui-core\",
        \"react-icons/ai\",
        \"react-icons/bi\",
        \"react-icons/bs\",
        \"react-icons/cg\",
        \"react-icons/ci\",
        \"react-icons/di\",
        \"react-icons/fa\",
        \"react-icons/fa6\",
        \"react-icons/fc\",
        \"react-icons/fi\",
        \"react-icons/gi\",
        \"react-icons/go\",
        \"react-icons/gr\",
        \"react-icons/hi\",
        \"react-icons/hi2\",
        \"react-icons/im\",
        \"react-icons/io\",
        \"react-icons/io5\",
        \"react-icons/lia\",
        \"react-icons/lib\",
        \"react-icons/lu\",
        \"react-icons/md\",
        \"react-icons/pi\",
        \"react-icons/ri\",
        \"react-icons/rx\",
        \"react-icons/si\",
        \"react-icons/sl\",
        \"react-icons/tb\",
        \"react-icons/tfi\",
        \"react-icons/ti\",
        \"react-icons/vsc\",
        \"react-icons/wi\"
      ]
    },
    \"htmlLimitedBots\": \"[\\\\w-]+-Google|Google-[\\\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight\",
    \"bundlePagesRouterDependencies\": false,
    \"configFile\": \"/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/next.config.js\",
    \"configFileName\": \"next.config.js\",
    \"turbopack\": {
      \"root\": \"/root/actions-runner/_work/next.js/next.js\"
    },
    \"exportPathMap\": {}
  }
- images.unoptimized: invalid type: string \"yup\", expected a boolean at line 64 column 24
    at <unknown> (TurbopackInternalError: failed to parse next.config.js: {) {
  location: undefined
}
"

  659 |       await nextConfig.restore()
  660 |
> 661 |       expect(stderr).toContain(
      |                      ^
  662 |         `Expected boolean, received string at "images.unoptimized"`
  663 |       )
  664 |     })

  at Object.toContain (integration/image-optimizer/test/index.test.ts:661:22)

pnpm test-dev-turbo test/e2e/app-dir/i18n-hybrid/i18n-hybrid.test.js (turbopack)

  • i18n-hybrid > should warn about i18n in app dir (DD)
Expand output

● i18n-hybrid › should warn about i18n in app dir

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

Expected substring: "i18n configuration in next.config.js is unsupported in App Router."
Received string:    "   ▲ Next.js 15.6.0-canary.21 (Turbopack)
   - Local:        http://localhost:42803
   - Network:      http://65.108.38.185:42803·
 ✓ Starting...
Creating turbopack project {
  dir: '/tmp/next-install-a327bc0202c7125bde222265c2ec3ab4101d1aaadd11f69f01acdd2a08d67374',
  testMode: true
}
 ✓ Ready in 560ms
"

  54 |
  55 |   it('should warn about i18n in app dir', async () => {
> 56 |     expect(next.cliOutput).toContain(
     |                            ^
  57 |       'i18n configuration in next.config.js is unsupported in App Router.'
  58 |     )
  59 |   })

  at Object.toContain (e2e/app-dir/i18n-hybrid/i18n-hybrid.test.js:56:28)

pnpm test-start-turbo test/e2e/app-dir/ppr-partial-hydration/ppr-partial-hydration.test.ts (turbopack)

  • PPR - partial hydration > No static shell, streaming metadata > should hydrate the shell without waiting for slow suspense boundaries (DD)
Expand output

● PPR - partial hydration › No static shell, streaming metadata › should hydrate the shell without waiting for slow suspense boundaries

page.waitForSelector: Timeout 10ms exceeded.
Call log:
  - waiting for locator('#shell-hydrated') 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 (lib/browsers/playwright.ts:405:17)
  at elementByCssInstant (e2e/app-dir/ppr-partial-hydration/ppr-partial-hydration.test.ts:54:16)
  at fn (lib/next-test-utils.ts:828:20)
  at Object.<anonymous> (e2e/app-dir/ppr-partial-hydration/ppr-partial-hydration.test.ts:48:7)
  at Proxy._chain (lib/browsers/playwright.ts:643:23)
  at Proxy._chain (lib/browsers/playwright.ts:619:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:447:17)
  at getAttribute (e2e/app-dir/ppr-partial-hydration/ppr-partial-hydration.test.ts:55:16)
  at fn (lib/next-test-utils.ts:828:20)
  at Object.<anonymous> (e2e/app-dir/ppr-partial-hydration/ppr-partial-hydration.test.ts:48:7)

pnpm test-dev-experimental test/e2e/app-dir/multiple-lockfiles/multiple-lockfiles.test.ts(Experimental)

  • multiple-lockfiles > should have multiple lockfiles warnings (DD)
Expand output

● multiple-lockfiles › should have multiple lockfiles warnings

expect(received).toMatch(expected)

Expected pattern: /We detected multiple lockfiles and selected the directory of .+ as the root directory\./
Received string:  "   ▲ Next.js 15.6.0-canary.21 (webpack)
   - Local:        http://localhost:45069
   - Network:      http://176.9.53.75:45069
   - 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`)·
 ✓ Starting...·
   We detected TypeScript in your project and created a tsconfig.json file for you.
 ✓ Ready in 1503ms
"

  24 |
  25 |   it('should have multiple lockfiles warnings', async () => {
> 26 |     expect(next.cliOutput).toMatch(
     |                            ^
  27 |       /We detected multiple lockfiles and selected the directory of .+ as the root directory\./
  28 |     )
  29 |

  at Object.toMatch (e2e/app-dir/multiple-lockfiles/multiple-lockfiles.test.ts:26:28)

pnpm test-dev-turbo test/e2e/deprecation-warnings/deprecation-warnings.test.ts (turbopack)

  • deprecation-warnings > with deprecated config options > should emit deprecation warnings for explicitly configured deprecated options (DD)
Expand output

● deprecation-warnings › with deprecated config options › should emit deprecation warnings for explicitly configured deprecated options

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

Expected substring: "Built-in amp support is deprecated"
Received string:    "   ▲ Next.js 15.6.0-canary.21 (Turbopack)
   - Local:        http://localhost:32961
   - Network:      http://148.251.6.243:32961
   - Experiments (use with caution):
     ✓ instrumentationHook·
 ✓ Starting...
Creating turbopack project {
  dir: '/tmp/next-install-6793e3141f1a3c4bb517c2f044b4864a970c0b07efe8aae91afadf578c065b5e',
  testMode: true
}·
   We detected TypeScript in your project and created a tsconfig.json file for you.
 ✓ Ready in 864ms
"

  31 |
  32 |       // Should warn about amp configuration
> 33 |       expect(logs).toContain('Built-in amp support is deprecated')
     |                    ^
  34 |
  35 |       // Should warn about experimental.instrumentationHook
  36 |       expect(logs).toContain('experimental.instrumentationHook')

  at Object.toContain (e2e/deprecation-warnings/deprecation-warnings.test.ts:33:20)

pnpm test-start-experimental test/e2e/config-schema-check/index.test.ts(Experimental)

  • next.config.js schema validating - invalid config > should warn the invalid next config (DD)
Expand output

● next.config.js schema validating - invalid config › should warn the invalid next config

TIMED OUT: success

undefined

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

Expected: 2
Received: 1

  753 |
  754 |   if (hardError) {
> 755 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  756 |   }
  757 |   return false
  758 | }

  at check (lib/next-test-utils.ts:755:11)
  at Object.<anonymous> (e2e/config-schema-check/index.test.ts:55:5)

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/e2e/next-config-warnings/esm-externals-false/esm-externals-false.test.ts (PPR)

  • next-config-warnings - esm-externals-false > should warn when using ESM externals: false (DD)
Expand output

● next-config-warnings - esm-externals-false › should warn when using ESM externals: false

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

Expected substring: "The \"experimental.esmExternals\" option has been modified. experimental.esmExternals is not recommended to be modified as it may disrupt module resolution. It should be removed from your next.config.js"
Received string:    "   ▲ Next.js 15.6.0-canary.21 (webpack)
   - Local:        http://localhost:36123
   - Network:      http://65.108.38.183:36123
   - Experiments (use with caution):
     ✓ clientParamParsing (enabled by `__NEXT_EXPERIMENTAL_PPR`)
     ✓ clientSegmentCache (enabled by `__NEXT_EXPERIMENTAL_PPR`)
     ⨯ esmExternals
     ✓ ppr (enabled by `__NEXT_EXPERIMENTAL_PPR`)
     ✓ rdcForNavigations (enabled by `__NEXT_EXPERIMENTAL_PPR`)·
 ✓ Starting...
[telemetry] {
  \"eventName\": \"NEXT_CLI_SESSION_STARTED\",
  \"payload\": {
    \"nextVersion\": \"15.6.0-canary.21\",
    \"nodeVersion\": \"v20.9.0\",
    \"cliCommand\": \"dev\",
    \"isSrcDir\": false,
    \"hasNowJson\": false,
    \"isCustomServer\": false,
    \"hasNextConfig\": true,
    \"buildTarget\": \"default\",
    \"hasWebpackConfig\": false,
    \"hasBabelConfig\": false,
    \"imageEnabled\": true,
    \"imageFutureEnabled\": true,
    \"basePathEnabled\": false,
    \"i18nEnabled\": false,
    \"locales\": null,
    \"localeDomainsCount\": null,
    \"localeDetectionEnabled\": null,
    \"imageDomainsCount\": 0,
    \"imageRemotePatternsCount\": 0,
    \"imageLocalPatternsCount\": null,
    \"imageSizes\": \"16,32,48,64,96,128,256,384\",
    \"imageQualities\": \"75\",
    \"imageLoader\": \"default\",
    \"imageFormats\": \"image/webp\",
    \"nextConfigOutput\": null,
    \"trailingSlashEnabled\": false,
    \"reactStrictMode\": false,
    \"webpackVersion\": 5,
    \"turboFlag\": false,
    \"isRspack\": false,
    \"appDir\": true,
    \"pagesDir\": false,
    \"staticStaleTime\": 300,
    \"dynamicStaleTime\": 0,
    \"reactCompiler\": false,
    \"reactCompilerCompilationMode\": null,
    \"reactCompilerPanicThreshold\": null
  }
}
[telemetry] {
  \"eventName\": \"NEXT_BUILD_FEATURE_USAGE\",
  \"payload\": {
    \"featureName\": \"turbopackPersistentCaching\",
    \"invocationCount\": 0
  }
}
 ✓ Ready in 1324ms
 ○ Compiling / ...
 ✓ Compiled / in 5.2s (596 modules)
"

  16 |       await next.fetch('/')
  17 |
> 18 |       expect(next.cliOutput).toContain(
     |                              ^
  19 |         `The "experimental.esmExternals" option has been modified. experimental.esmExternals is not recommended to be modified as it may disrupt module resolution. It should be removed from your next.config.js`
  20 |       )
  21 |     })

  at Object.toContain (e2e/next-config-warnings/esm-externals-false/esm-externals-false.test.ts:18:30)

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts (PPR)

  • parallel-routes-revalidation > server action revalidation > handles refreshing when multiple parallel slots are active (DD)
Expand output

● parallel-routes-revalidation › server action revalidation › handles refreshing when multiple parallel slots are active

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

Expected: not "1758559342310"

  415 |
  416 |         // And the drawer should have a new time
> 417 |         expect(await browser.elementById('drawer-now').text()).not.toEqual(
      |                                                                    ^
  418 |           currentDrawerTime
  419 |         )
  420 |

  at toEqual (e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts:417:68)
  at retry (lib/next-test-utils.ts:828:14)
  at Object.<anonymous> (e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts:409:7)

selfSignedCertificate?: SelfSignedCertificate
}

export async function getRequestHandlers({
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This function was a bit silly, it's just passing everything through to initialize. The only thing it did was rename the dev argument to isDev. I'm just calling initialize directly now.

@ijjk
Copy link
Copy Markdown
Member

ijjk commented Sep 19, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
buildDuration 19.6s 15.4s N/A
buildDurationCached 14.7s 11.7s N/A
nodeModulesSize 452 MB 452 MB ⚠️ +32.6 kB
nextStartRea..uration (ms) 708ms 761ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
234bef07-HASH.js gzip 54.8 kB 54.8 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.5 kB 46 kB N/A
framework-HASH.js gzip 57.7 kB 57.7 kB N/A
main-app-HASH.js gzip 261 B 257 B N/A
main-HASH.js gzip 37.1 kB 36.8 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 169 B 169 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart 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 vercel/next.js bgw/reload-config-on-dev-server-restart Change
_buildManifest.js gzip 770 B 770 B
Overall change 770 B 770 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
index.html gzip 523 B 522 B N/A
link.html gzip 538 B 534 B N/A
withRouter.html gzip 519 B 518 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
edge-ssr.js gzip 121 kB 121 kB N/A
page.js gzip 242 kB 241 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
middleware-b..fest.js gzip 689 B 690 B N/A
middleware-r..fest.js gzip 156 B 155 B N/A
middleware.js gzip 33.4 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 vercel/next.js bgw/reload-config-on-dev-server-restart Change
app-page-exp...dev.js gzip 286 kB 286 kB
app-page-exp..prod.js gzip 157 kB 157 kB
app-page-tur...dev.js gzip 287 kB 287 kB N/A
app-page-tur..prod.js gzip 157 kB 157 kB
app-page-tur...dev.js gzip 275 kB 275 kB
app-page-tur..prod.js gzip 151 kB 151 kB
app-page.run...dev.js gzip 274 kB 274 kB N/A
app-page.run..prod.js gzip 151 kB 151 kB
app-route-ex...dev.js gzip 70.5 kB 70.5 kB
app-route-ex..prod.js gzip 49.6 kB 49.6 kB
app-route-tu...dev.js gzip 70.5 kB 70.5 kB
app-route-tu..prod.js gzip 49.6 kB 49.6 kB
app-route-tu...dev.js gzip 69.9 kB 69.9 kB
app-route-tu..prod.js gzip 49.2 kB 49.2 kB
app-route.ru...dev.js gzip 69.9 kB 69.9 kB
app-route.ru..prod.js gzip 49.2 kB 49.2 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.8 kB 42.8 kB
pages-api-tu..prod.js gzip 32.9 kB 32.9 kB
pages-api.ru...dev.js gzip 42.8 kB 42.8 kB
pages-api.ru..prod.js gzip 32.9 kB 32.9 kB
pages-turbo....dev.js gzip 53 kB 53 kB
pages-turbo...prod.js gzip 40.4 kB 40.4 kB
pages.runtim...dev.js gzip 53.2 kB 53.2 kB
pages.runtim..prod.js gzip 40.6 kB 40.6 kB
server.runti..prod.js gzip 78.2 kB 78.2 kB
Overall change 2.08 MB 2.08 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js bgw/reload-config-on-dev-server-restart Change
0.pack gzip 3.16 MB 3.17 MB ⚠️ +10.1 kB
index.pack gzip 96.8 kB 96 kB N/A
Overall change 3.16 MB 3.17 MB ⚠️ +10.1 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,36 +611,36 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-a7fb71e5f6213aa9.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-75ff7f75f4c9520b.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-8f4e796cc66bb887.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-21398e242bebd4bd.js",
     ],
-    "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-97249b00762d04b9.js"],
+    "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-96acbf1ec5bf4dbf.js"],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-30fd1831d1c5954d.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-f0abb8f1d5d6aafc.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-933632969493a23b.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-a6de0bd7312dbe87.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-fbde6d2b170ddc8a.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-8437b1c654938313.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-0fcabd05d9a7b019.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-52423902769dcda6.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-957c9636cda350bb.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-48956e83e76a0b7c.js"],
     "/image": [
-      "static\u002Fchunks\u002F3414-0fcfc359d1626bc2.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-bcf65fa5afa25af3.js",
+      "static\u002Fchunks\u002F4432-80834164a4d7ec68.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-00893f08e46cefe9.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-107187295a8a4aea.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-1312906a9876c4c3.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1422147417dba74a.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-77c6ee7fa90e109b.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-a68c215ba4b2c288.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-32f0c3e4bc363d50.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-0af6fb4f6ceaec8e.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-0a50058d9954ea8e.js",
     ],
     sortedPages: [
       "\u002F",
Diff for amp-HASH.js
@@ -1,17 +1,65 @@
 (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) {
+      }
 
       /***/
     },
 
-    /***/ 4642: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9926: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -27,8 +75,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 +97,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,7 +50,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function () {
-          return __webpack_require__(5267);
+          return __webpack_require__(6941);
         },
       ]);
       if (false) {
@@ -64,7 +64,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;
       }
@@ -288,63 +334,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__
@@ -371,24 +361,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 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 +394,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`.
@@ -521,13 +494,40 @@ 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) {
+      }
+
+      /***/
+    },
   },
   /******/ (__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,30 @@
 
       /***/
     },
+
+    /***/ 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) {
+      }
+
+      /***/
+    },
   },
   /******/ (__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,30 @@
 
       /***/
     },
+
+    /***/ 8751: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(1992);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__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,24 @@
 (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) {
+      }
+
+      /***/
+    },
+
+    /***/ 2770: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -59,30 +76,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 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,16 +84,16 @@
       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) {
@@ -495,43 +415,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 +493,7 @@
       /***/
     },
 
-    /***/ 9693: /***/ (
+    /***/ 7047: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -617,7 +501,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/link",
         function () {
-          return __webpack_require__(9948);
+          return __webpack_require__(4174);
         },
       ]);
       if (false) {
@@ -626,48 +510,164 @@
       /***/
     },
 
-    /***/ 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) {
+        } 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 +677,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 script-HASH.js
@@ -1,7 +1,34 @@
 (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) {
+      }
+
+      /***/
+    },
+
+    /***/ 8889: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +43,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 +75,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 3414-HASH.js

Diff too large to display

Diff for 8863-HASH.js
@@ -1,8 +1,33 @@
 "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) {
+      } //# sourceMappingURL=amp-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 1912: /***/ (module, exports, __webpack_require__) => {
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
@@ -12,7 +37,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 +103,93 @@
       /***/
     },
 
-    /***/ 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) {
+      } //# 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) {
+        }
+        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 +220,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: 60,
-        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 +274,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 +295,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 = [
@@ -410,7 +472,7 @@
       /***/
     },
 
-    /***/ 2843: /***/ (
+    /***/ 6745: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -424,9 +486,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",
@@ -858,239 +920,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 +931,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],
@@ -1447,5 +1277,175 @@
 
       /***/
     },
+
+    /***/ 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: 60,
+        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) {
+      } //# sourceMappingURL=image-config-context.shared-runtime.js.map
+
+      /***/
+    },
   },
 ]);
Diff for 9304-HASH.js

Diff too large to display

Diff for main-HASH.js

Diff too large to display

Commit: 7a50ee8

dir
)

this.init = await initialize({
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Missing customServer: true parameter in the initialize function call for NextCustomServer, which should indicate this is running in custom server mode.

View Details
📝 Patch Details
diff --git a/packages/next/src/server/next.ts b/packages/next/src/server/next.ts
index 985c9fa20b..451d60b333 100644
--- a/packages/next/src/server/next.ts
+++ b/packages/next/src/server/next.ts
@@ -401,6 +401,7 @@ class NextCustomServer implements NextWrapperServer {
       hostname: this.options.hostname || 'localhost',
       minimalMode: this.options.minimalMode,
       quiet: this.options.quiet,
+      customServer: true,
     })
   }
 

Analysis

Missing customServer: true parameter in NextCustomServer.initialize() call

What fails: NextCustomServer.prepare() calls initialize() without passing customServer: true, causing isCustomServer to be undefined instead of true in router server context and pages handler shared context.

How to reproduce:

  1. Create a Next.js custom server using next() constructor
  2. Check the isCustomServer value in router server context - it will be undefined
  3. Pages handler shared context will have customServer: undefined instead of true

Expected: NextCustomServer should pass customServer: true to initialize() since it represents the custom server mode (instantiated when options.customServer !== false at line 568).

Impact: Affects telemetry reporting and shared context values that may influence server behavior for custom server setups. The pages handler uses Boolean(routerServerContext?.isCustomServer) || undefined to set customServer in shared context, which will incorrectly be undefined instead of true.

Evidence: The initialize function signature at packages/next/src/server/lib/router-server.ts:87 accepts customServer?: boolean, and this value flows to isCustomServer: opts.customServer at line 146, then to pages handler shared context in packages/next/src/server/route-modules/pages/pages-handler.ts.

@bgw bgw force-pushed the bgw/reload-config-on-dev-server-restart branch from e30346a to d0857f9 Compare September 20, 2025 00:24
@bgw bgw force-pushed the bgw/reload-config-on-dev-server-restart branch from d0857f9 to 7a50ee8 Compare September 22, 2025 16:10
@bgw bgw force-pushed the bgw/merge-react-compiler-with-babel-loader-config branch 3 times, most recently from 5a5269e to 8af4f54 Compare September 22, 2025 21:54
@bgw bgw changed the base branch from bgw/merge-react-compiler-with-babel-loader-config to graphite-base/84000 September 22, 2025 22:33
@bgw bgw force-pushed the graphite-base/84000 branch from 8af4f54 to b853167 Compare September 22, 2025 22:34
@bgw bgw force-pushed the bgw/reload-config-on-dev-server-restart branch from 7a50ee8 to 96ffdc6 Compare September 22, 2025 22:34
@graphite-app graphite-app bot changed the base branch from graphite-base/84000 to canary September 22, 2025 22:34
@bgw bgw force-pushed the bgw/reload-config-on-dev-server-restart branch from 96ffdc6 to b56342b Compare September 22, 2025 22:35
Copy link
Copy Markdown
Member Author

@bgw bgw left a comment

Choose a reason for hiding this comment

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

Looks like #82654 actually (inadvertently) fixed this issue.

@bgw bgw closed this Sep 22, 2025
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 10, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants