8000
Skip to content

Fix styled-jsx race condition: styles lost due to concurrent rendering#92459

Merged
timneutkens merged 1 commit intocanaryfrom
sokra/styled-jsx-race-condition
Apr 7, 2026
Merged

Fix styled-jsx race condition: styles lost due to concurrent rendering#92459
timneutkens merged 1 commit intocanaryfrom
sokra/styled-jsx-race-condition

Conversation

@sokra
Copy link
Copy Markdown
Member
@sokra sokra commented Apr 7, 2026

What?

Fix a race condition in the Pages Router SSR path where styled-jsx styles were dropped from the rendered HTML.

Why?

styledJsxInsertedHTML() reads and flushes the styled-jsx style registry. Previously it was called concurrently with the page render via Promise.all:

const [rawStyledJsxInsertedHTML, content] = await Promise.all([
  renderToString(styledJsxInsertedHTML()),
  (async () => { /* render the page */ })(),
])

Because both ran at the same time, styledJsxInsertedHTML() could (and in practice did) execute and flush the registry before the page render had finished populating it. The result was that dynamic styled-jsx styles — those with interpolated expressions that compute their class names at runtime via DJB2 hashing — were silently dropped from the SSR output, causing a flash of unstyled content on first load.

This is particularly visible in production deployments where all components use dynamic styled-jsx (numeric jsx-* class names), since those styles only exist in the registry after rendering completes.

How?

Serialize the two operations: render the page first, then call styledJsxInsertedHTML(). Since the registry is fully populated by the time it is read, all styles are captured correctly.

A new e2e test (test/e2e/styled-jsx-dynamic) exercises this scenario with multiple nested components that all use dynamic styled-jsx with interpolated props, covering the exact FOUC pattern seen in production.

…all rendering

styledJsxInsertedHTML() was called concurrently with page rendering via
Promise.all, so the style registry was read before it was populated by
the render. Serialize the two operations so styles are collected after
rendering completes.

Co-Authored-By: Claude <noreply@anthropic.com>
@sokra sokra marked this pull request as ready for review April 7, 2026 14:14
Copy link
Copy Markdown
Contributor
@vercel vercel bot left a comment

Choose a reason for hiding this comment

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

Additional Suggestion:

TypeError when accessing docProps.styles and docProps.head on undefined docProps after loadDocumentInitialProps returns null

Fix on Vercel

@nextjs-bot
Copy link
Copy Markdown
Collaborator

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms ▁█▅▅▅
Cold (Ready in log) 442ms 443ms ▁▂▅▇▄
Cold (First Request) 1.085s 1.135s ▆▁▁▂▂
Warm (Listen) 456ms 456ms █▁██▁
Warm (Ready in log) 442ms 444ms ▂▂▇█▁
Warm (First Request) 336ms 341ms ▃▄▇█▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 455ms ▁▁▅▁▅
Cold (Ready in log) 437ms 436ms ▁▃▆▂▂
Cold (First Request) 1.959s 1.938s ▇▇▇▆▁
Warm (Listen) 456ms 456ms ▁▁▁▁▁
Warm (Ready in log) 438ms 437ms ▁▂▅▁▂
Warm (First Request) 1.961s 1.982s ▆▇█▆▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.900s 3.923s ▇▆██▁
Cached Build 3.880s 3.897s ▄███▄
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.519s 14.577s ▁▂▅▂▂
Cached Build 14.682s 14.697s ▁▂▇▃▄
node_modules Size 488 MB 488 MB █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
02fkg8wfh0iju.js gzip 9.19 kB N/A -
050zwt5xh_0tx.js gzip 10.4 kB N/A -
0803-3r6mifdx.js gzip 157 B N/A -
087fzjd-gvlzv.js gzip 450 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0d0pcwea0l749.js gzip 151 B N/A -
0d34flh8j9r6u.js gzip 156 B N/A -
0p0khj57rq_v_.js gzip 162 B N/A -
0ppxcl_z43mad.js gzip 8.52 kB N/A -
13mnpc17btogu.js gzip 157 B N/A -
19oha6-znmkcv.js gzip 8.55 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1ppe_gkx_dsny.js gzip 159 B N/A -
2_5rjb7lqxntf.js gzip 221 B 221 B
219prxwxgaalc.js gzip 7.61 kB N/A -
26elcgxnn9zjd.js gzip 8.52 kB N/A -
28s7tbll9vbjr.js gzip 156 B N/A -
2900hudr6gvm0.js gzip 2.28 kB N/A -
2bbl2qamyvimj.js gzip 65.7 kB N/A -
2lv2js3kmdeho.js gzip 8.48 kB N/A -
2rehygrd36hqv.js gzip 8.58 kB N/A -
2scbv16he964r.js gzip 158 B N/A -
2srwswih0m9_h.js gzip 13.3 kB N/A -
3-jz00s4w-r6h.js gzip 13 kB N/A -
3-p9p9mheqhzx.js gzip 8.55 kB N/A -
31030bryqpolg.js gzip 8.53 kB N/A -
31dx5nmrzzuy7.js gzip 225 B N/A -
37r23u64aoktk.js gzip 155 B N/A -
3925v09gtu-5k.js gzip 49 kB N/A -
39x4zj5mjb4d_.js gzip 9.77 kB N/A -
3at2ovgizp8r6.js gzip 158 B N/A -
3bknr2e7m9s7z.js gzip 155 B N/A -
3k-48b78ys_vy.js gzip 10.1 kB N/A -
3m7-5rfj0avoz.js gzip 12.9 kB N/A -
3t39n05ky9z08.js gzip 70.8 kB N/A -
3uqce_6sa526g.js gzip 8.47 kB N/A -
3yurjqk-sjs3y.js gzip 1.46 kB N/A -
3znov3m90-kab.js gzip 168 B N/A -
40ybjx9c192n0.js gzip 13.8 kB N/A -
421vzwdt9j1b_.js gzip 5.62 kB N/A -
44jj5q-kk1jan.js gzip 157 B N/A -
turbopack-03..e7c0.js gzip 4.18 kB N/A -
turbopack-0k..9h2a.js gzip 4.18 kB N/A -
turbopack-0m..6r79.js gzip 4.18 kB N/A -
turbopack-0v..v8st.js gzip 4.18 kB N/A -
turbopack-1s..tsd2.js gzip 4.16 kB N/A -
turbopack-3-..bo-6.js gzip 4.18 kB N/A -
turbopack-31..l4gh.js gzip 4.18 kB N/A -
turbopack-36..rum2.js gzip 4.18 kB N/A -
turbopack-3i..3636.js gzip 4.18 kB N/A -
turbopack-3v..wfxq.js gzip 4.18 kB N/A -
turbopack-3v..1qwv.js gzip 4.19 kB N/A -
turbopack-3z..kcbv.js gzip 4.18 kB N/A -
turbopack-40..j2ay.js gzip 4.18 kB N/A -
turbopack-42..qz47.js gzip 4.17 kB N/A -
03dgzoo-qf3sm.js gzip N/A 9.19 kB -
03i0taczqebbx.js gzip N/A 70.8 kB -
05tx5f25dlivn.js gzip N/A 8.53 kB -
0c7ez6p2qc57f.js gzip N/A 5.62 kB -
0duvj3qk5pvgn.js gzip N/A 13.8 kB -
0ifxao1ktkgwg.js gzip N/A 156 B -
0m-34rm9w_wpm.js gzip N/A 7.6 kB -
0qnwuk92m8i7o.js gzip N/A 10.4 kB -
0r4wrn6n0ue2m.js gzip N/A 8.55 kB -
0rp0fodtbt_6m.js gzip N/A 8.52 kB -
0sfck-km4dl1k.js gzip N/A 8.47 kB -
0x0xuhmxzwkp8.js gzip N/A 8.47 kB -
1-wdvgxnzicj7.js gzip N/A 1.46 kB -
11u6nxujb2eg4.js gzip N/A 450 B -
19uunh8umr1a1.js gzip N/A 157 B -
1el9fuakpgh8m.js gzip N/A 155 B -
1jv-o1_s-zmua.js gzip N/A 49 kB -
1mifo-hcc4vf6.js gzip N/A 154 B -
1o5x2xlfw7x62.js gzip N/A 156 B -
1sk7rrnby7fjt.js gzip N/A 157 B -
2-j7jrt35v955.js gzip N/A 160 B -
27kwgyklbqvcl.js gzip N/A 152 B -
2e2z-03lx4fjc.js gzip N/A 13 kB -
2irxuxkr23i0g.js gzip N/A 160 B -
2k9ax08cjl2id.js gzip N/A 12.9 kB -
2lms6k76q5-6m.js gzip N/A 13.3 kB -
2qx4twi9i3xus.js gzip N/A 2.28 kB -
2srnqic6tvxxd.js gzip N/A 8.52 kB -
2zkc9u4375pyw.js gzip N/A 157 B -
30l7m4nayp73a.js gzip N/A 8.55 kB -
34v1uamxoz09s.js gzip N/A 170 B -
34wde90lr4zme.js gzip N/A 157 B -
3h_ecpiaatwgc.js gzip N/A 10.1 kB -
3hxw-cpxtvy_3.js gzip N/A 156 B -
3ity0aahajapd.js gzip N/A 225 B -
3wrhpuc-j1aw9.js gzip N/A 9.77 kB -
3xlti3rufjlyg.js gzip N/A 65.7 kB -
43mlw9dy_8f02.js gzip N/A 8.58 kB -
turbopack-02..6_tq.js gzip N/A 4.18 kB -
turbopack-0h..r50b.js gzip N/A 4.18 kB -
turbopack-17..z-3u.js gzip N/A 4.19 kB -
turbopack-18..evlj.js gzip N/A 4.17 kB -
turbopack-1c..a07c.js gzip N/A 4.18 kB -
turbopack-1h..a606.js gzip N/A 4.18 kB -
turbopack-1o.._bpf.js gzip N/A 4.18 kB -
turbopack-1w..e9r6.js gzip N/A 4.18 kB -
turbopack-22..wdmr.js gzip N/A 4.18 kB -
turbopack-2c..zde7.js gzip N/A 4.18 kB -
turbopack-31..4lzd.js gzip N/A 4.18 kB -
turbopack-3g..9wtz.js gzip N/A 4.18 kB -
turbopack-3l..q89n.js gzip N/A 4.18 kB -
turbopack-40..aa11.js gzip N/A 4.16 kB -
Total 464 kB 464 kB ✅ -22 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 722 B 714 B 🟢 8 B (-1%)
Total 722 B 714 B ✅ -8 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 434 B 435 B
Total 434 B 435 B ⚠️ +1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.54 kB N/A -
6280-HASH.js gzip 60.7 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.59 kB N/A -
e8aec2e4-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 255 B 254 B
main-HASH.js gzip 39.4 kB 39.3 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.59 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.55 kB -
6948ada0-HASH.js gzip N/A 62.8 kB -
9544-HASH.js gzip N/A 61.4 kB -
Total 235 kB 235 kB ⚠️ +580 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.98 kB ✅ -1 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 126 kB
page.js gzip 273 kB 273 kB
Total 398 kB 398 kB ⚠️ +155 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 617 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 44.3 kB 44.1 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.9 kB 45.8 kB ✅ -186 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.37 MB 🟢 6.81 kB (0%)
index.pack gzip 118 kB 116 kB 🟢 1.64 kB (-1%)
index.pack.old gzip 114 kB 114 kB
Total 4.61 MB 4.6 MB ✅ -8.25 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 342 kB 342 kB
app-page-exp..prod.js gzip 189 kB 189 kB
app-page-tur...dev.js gzip 341 kB 341 kB
app-page-tur..prod.js gzip 189 kB 189 kB
app-page-tur...dev.js gzip 338 kB 338 kB
app-page-tur..prod.js gzip 187 kB 187 kB
app-page.run...dev.js gzip 338 kB 338 kB
app-page.run..prod.js gzip 187 kB 187 kB
app-route-ex...dev.js gzip 76.6 kB 76.6 kB
app-route-ex..prod.js gzip 52.2 kB 52.2 kB
app-route-tu...dev.js gzip 76.6 kB 76.6 kB
app-route-tu..prod.js gzip 52.2 kB 52.2 kB
app-route-tu...dev.js gzip 76.2 kB 76.2 kB
app-route-tu..prod.js gzip 52 kB 52 kB
app-route.ru...dev.js gzip 76.2 kB 76.2 kB
app-route.ru..prod.js gzip 52 kB 52 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.8 kB 43.8 kB
pages-api-tu..prod.js gzip 33.4 kB 33.4 kB
pages-api.ru...dev.js gzip 43.8 kB 43.8 kB
pages-api.ru..prod.js gzip 33.4 kB 33.4 kB
pages-turbo....dev.js gzip 53.2 kB 53.2 kB
pages-turbo...prod.js gzip 39 kB 39 kB
pages.runtim...dev.js gzip 53.2 kB 53.2 kB
pages.runtim..prod.js gzip 39 kB 39 kB
server.runti..prod.js gzip 62.8 kB 62.8 kB
Total 3.03 MB 3.03 MB ✅ -13 B
📝 Changed Files (4 files)

Files with changes:

  • pages-turbo...ntime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
  • pages.runtime.prod.js
View diffs
pages-turbo...ntime.dev.js
@@ -19,7 +19,7 @@ To revalidate as soon as possible, you can set the value to \`1\`.`),"__NEXT_ERR
 To only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`),revalidate=data.revalidate;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number for ${req.url}. Mixed numbers, such as '${data.revalidate}', cannot be used.
 Try changing the value to '${Math.ceil(data.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===data.revalidate)revalidate=1;else if(!1===data.revalidate||void 0===data.revalidate)revalidate=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(data.revalidate)}' for ${req.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else revalidate=!1;if(props.pageProps=Object.assign({},props.pageProps,"props"in data?data.props:void 0),metadata.cacheControl={revalidate,expire:void 0},metadata.pageData=props,metadata.isNotFound)return new RenderResult(null,{metadata,contentType:null})}if(getServerSideProps&&(props.__N_SSP=!0),getServerSideProps&&!isFallback){let data,canAccessRes=!0,resOrProxy=res,deferredContent=!1;resOrProxy=new Proxy(res,{get:function(obj,prop){if(!canAccessRes){let message=`You should not access 'res' after getServerSideProps resolves.
 Read more: https://nextjs.org/docs/messages/gssp-no-mutating-res`;if(deferredContent)throw Object.defineProperty(Error(message),"__NEXT_ERROR_CODE",{value:"E1028",enumerable:!1,configurable:!0});warn(message)}return reflect.ReflectAdapter.get(obj,prop,res)}});try{data=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.getServerSideProps,{spanName:`getServerSideProps ${pathname}`,attributes:{"next.route":pathname}},async()=>getServerSideProps({req:req,res:resOrProxy,query,resolvedUrl:renderOpts.resolvedUrl,...pageIsDynamic?{params}:void 0,...!1!==previewData?{draftMode:!0,preview:!0,previewData:previewData}:void 0,locales:[...renderOpts.locales??[]],locale:renderOpts.locale,defaultLocale:renderOpts.defaultLocale})),canAccessRes=!1,metadata.cacheControl={revalidate:0,expire:void 0}}catch(serverSidePropsError){throw"object"==typeof serverSidePropsError&&null!==serverSidePropsError&&"name"in serverSidePropsError&&"message"in serverSidePropsError&&"ENOENT"===serverSidePropsError.code&&delete serverSidePropsError.code,serverSidePropsError}if(null==data)throw Object.defineProperty(Error(constants.GSSP_NO_RETURNED_VALUE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});data.props instanceof Promise&&(deferredContent=!0);let invalidKeys=Object.keys(data).filter(key=>"props"!==key&&"redirect"!==key&&"notFound"!==key);if(data.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${pathname}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(data.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${pathname}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(invalidKeys.length)throw Object.defineProperty(Error(invalidKeysMsg("getServerSideProps",invalidKeys)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in data&&data.notFound){if("/404"===pathname)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return metadata.isNotFound=!0,new RenderResult(null,{metadata,contentType:null})}if("redirect"in data&&"object"==typeof data.redirect&&(checkRedirectValues(data.redirect,req,"getServerSideProps"),data.props={__N_REDIRECT:data.redirect.destination,__N_REDIRECT_STATUS:getRedirectStatus(data.redirect)},void 0!==data.redirect.basePath&&(data.props.__N_REDIRECT_BASE_PATH=data.redirect.basePath),metadata.isRedirect=!0),deferredContent&&(data.props=await data.props),(process.env.__NEXT_DEV_SERVER||isBuildTimeSSG)&&!isSerializableProps(pathname,"getServerSideProps",data.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});props.pageProps=Object.assign({},props.pageProps,data.props),metadata.pageData=props}if(!isSSG&&!getServerSideProps&&Object.keys((null==props?void 0:props.pageProps)||{}).includes("url")&&console.warn(`The prop \`url\` is a reserved prop in Next.js for legacy reasons and will be overridden on page ${pathname}
-See more info here: https://nextjs.org/docs/messages/reserved-page-prop`),isNextDataRequest&&!isSSG||metadata.isRedirect)return new RenderResult(JSON.stringify(props),{metadata,contentType:constants.JSON_CONTENT_TYPE_HEADER});if(isFallback&&(props.pageProps={}),isResSent(res)&&!isSSG)return RenderResult.EMPTY;let filteredBuildManifest=buildManifest;if(isAutoExport&&pageIsDynamic){let _page,page=(_page=normalizePathSep(normalizePagePath(pathname))).startsWith("/index/")&&!isDynamicRoute(_page)?_page.slice(6):"/index"!==_page?_page:"/";page in filteredBuildManifest.pages&&(filteredBuildManifest={...filteredBuildManifest,pages:{...filteredBuildManifest.pages,[page]:[...filteredBuildManifest.pages[page],...filteredBuildManifest.lowPriorityFiles.filter(f=>f.includes("_buildManifest"))]},lowPriorityFiles:filteredBuildManifest.lowPriorityFiles.filter(f=>!f.includes("_buildManifest"))})}let Body=({children})=>(0,jsx_runtime_namespaceObject.jsx)("div",{id:"__next",children:children}),renderDocument=async()=>{let documentInitialPropsRes,styles,styles1;async function loadDocumentInitialProps(renderShell){let renderPage=async(options={})=>{if(ctx.err&&ErrorDebug)return renderShell&&renderShell(App,Component),{html:await renderToString((0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})})),head};if(process.env.__NEXT_DEV_SERVER&&(props.router||props.Component))throw Object.defineProperty(Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props"),"__NEXT_ERROR_CODE",{value:"E230",enumerable:!1,configurable:!0});let{App:EnhancedApp,Component:EnhancedComponent}="function"==typeof options?{App:App,Component:options(Component)}:{App:options.enhanceApp?options.enhanceApp(App):App,Component:options.enhanceComponent?options.enhanceComponent(Component):Component},stream=await renderShell(EnhancedApp,EnhancedComponent);return await stream.allReady,{html:await streamToString(stream),head}},documentCtx={...ctx,renderPage},docProps=await loadGetInitialProps(Document,documentCtx);if(isResSent(res)&&!isSSG)return null;if(!docProps||"string"!=typeof docProps.html)throw Object.defineProperty(Error(`"${getDisplayName(Document)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps,documentCtx}}Document.__NEXT_BUILTIN_DOCUMENT__;let renderShell=async(EnhancedApp,EnhancedComponent)=>{let EnhancedApp1,EnhancedComponent1,content=(EnhancedApp1=EnhancedApp||App,EnhancedComponent1=EnhancedComponent||Component,ctx.err&&ErrorDebug?(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})}):(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(AppContainerWithIsomorphicFiberStructure,{children:renderPageTree(EnhancedApp1,EnhancedComponent1,{...props,router})})}));return await function({ReactDOMServer,element,streamOptions}){return(0,tracer_.getTracer)().trace(trace_constants.AppRenderSpan.renderToReadableStream,async()=>ReactDOMServer.renderToReadableStream(element,streamOptions))}({ReactDOMServer:ReactDOMServerPages_default(),element:content})},hasDocumentGetInitialProps=!!Document.getInitialProps,[rawStyledJsxInsertedHTML,content]=await Promise.all([renderToString((styles1=jsxStyleRegistry.styles(),jsxStyleRegistry.flush(),(0,jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment,{children:styles1}))),(async()=>{if(hasDocumentGetInitialProps){if(null===(documentInitialPropsRes=await loadDocumentInitialProps(renderShell)))return null;let{docProps}=documentInitialPropsRes;return docProps.html}{documentInitialPropsRes={};let stream=await renderShell(App,Component);return await stream.allReady,streamToString(stream)}})()]);if(null===content)return null;let{docProps}=documentInitialPropsRes||{};return hasDocumentGetInitialProps?(styles=docProps.styles,head=docProps.head):(styles=jsxStyleRegistry.styles(),jsxStyleRegistry.flush()),{contentHTML:rawStyledJsxInsertedHTML+content,documentElement:htmlProps=>(0,jsx_runtime_namespaceObject.jsx)(Document,{...htmlProps,...docProps}),head,headTags:[],styles}};(0,tracer_.getTracer)().setRootSpanAttribute("next.route",renderOpts.page);let documentResult=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderDocument,{spanName:`render route (pages) ${renderOpts.page}`,attributes:{"next.route":renderOpts.page}},async()=>renderDocument());if(!documentResult)return new RenderResult(null,{metadata,contentType:constants.HTML_CONTENT_TYPE_HEADER});let dynamicImportsIds=new Set,dynamicImports=new Set;for(let mod of reactLoadableModules){let manifestItem=reactLoadableManifest[mod];manifestItem&&(dynamicImportsIds.add(manifestItem.id),manifestItem.files.forEach(item=>{dynamicImports.add(item)}))}let docComponentsRendered={},{assetPrefix,defaultLocale,disableOptimizedLoading,domainLocales,locale,locales}=renderOpts,htmlProps={__NEXT_DATA__:{props,page:pathname,query,buildId:sharedContext.buildId,assetPrefix:""===assetPrefix?void 0:assetPrefix,nextExport:!0===nextExport||void 0,autoExport:!0===isAutoExport||void 0,isFallback,isExperimentalCompile,dynamicIds:0===dynamicImportsIds.size?void 0:Array.from(dynamicImportsIds),err:renderOpts.err?function(dev,err){if(dev){let source="server";return source=err[symbolError]||"server",{name:err.name,source,message:strip_ansi_default()(err.message),stack:err.stack,digest:err.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!!process.env.__NEXT_DEV_SERVER,renderOpts.err):void 0,gsp:!!getStaticProps||void 0,gssp:!!getServerSideProps||void 0,customServer:sharedContext.customServer,gip:!!hasPageGetInitialProps||void 0,appGip:!defaultAppGetInitialProps||void 0,locale,locales,defaultLocale,domainLocales,isPreview:!0===isPreview||void 0,notFoundSrcPage:notFoundSrcPage&&process.env.__NEXT_DEV_SERVER?notFoundSrcPage:void 0},nonce,buildManifest:filteredBuildManifest,docComponentsRendered,dangerousAsPath:router.asPath,isDevelopment:!!process.env.__NEXT_DEV_SERVER,deploymentId:sharedContext.deploymentId,dynamicImports:Array.from(dynamicImports),dynamicCssManifest:new Set(renderOpts.dynamicCssManifest||[]),assetPrefix,unstable_runtimeJS:void 0,unstable_JsPreload:pageConfig.unstable_JsPreload,assetQueryString:assetQueryString||"",mutableAssetQueryString:mutableAssetQueryString||"",scriptLoader,locale,disableOptimizedLoading,head:documentResult.head,headTags:documentResult.headTags,styles:documentResult.styles,crossOrigin:renderOpts.crossOrigin,optimizeCss:renderOpts.optimizeCss,nextConfigOutput:renderOpts.nextConfigOutput,nextScriptWorkers:renderOpts.nextScriptWorkers,runtime:globalRuntime,largePageDataBytes:renderOpts.largePageDataBytes,nextFontManifest:renderOpts.nextFontManifest,experimentalClientTraceMetadata:renderOpts.experimental.clientTraceMetadata},document=(0,jsx_runtime_namespaceObject.jsx)(HtmlContext.Provider,{value:htmlProps,children:documentResult.documentElement(htmlProps)}),documentHTML=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderToString,async()=>renderToString(document));{let nonRenderedComponents=[];for(let comp of["Main","Head","NextScript","Html"])docComponentsRendered[comp]||nonRenderedComponents.push(comp);if(nonRenderedComponents.length){let missingComponentList=nonRenderedComponents.map(e=>`<${e} />`).join(", "),plural=1!==nonRenderedComponents.length?"s":"";console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${plural}.
+See more info here: https://nextjs.org/docs/messages/reserved-page-prop`),isNextDataRequest&&!isSSG||metadata.isRedirect)return new RenderResult(JSON.stringify(props),{metadata,contentType:constants.JSON_CONTENT_TYPE_HEADER});if(isFallback&&(props.pageProps={}),isResSent(res)&&!isSSG)return RenderResult.EMPTY;let filteredBuildManifest=buildManifest;if(isAutoExport&&pageIsDynamic){let _page,page=(_page=normalizePathSep(normalizePagePath(pathname))).startsWith("/index/")&&!isDynamicRoute(_page)?_page.slice(6):"/index"!==_page?_page:"/";page in filteredBuildManifest.pages&&(filteredBuildManifest={...filteredBuildManifest,pages:{...filteredBuildManifest.pages,[page]:[...filteredBuildManifest.pages[page],...filteredBuildManifest.lowPriorityFiles.filter(f=>f.includes("_buildManifest"))]},lowPriorityFiles:filteredBuildManifest.lowPriorityFiles.filter(f=>!f.includes("_buildManifest"))})}let Body=({children})=>(0,jsx_runtime_namespaceObject.jsx)("div",{id:"__next",children:children}),renderDocument=async()=>{let documentInitialPropsRes,content,styles,styles1;async function loadDocumentInitialProps(renderShell){let renderPage=async(options={})=>{if(ctx.err&&ErrorDebug)return renderShell&&renderShell(App,Component),{html:await renderToString((0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})})),head};if(process.env.__NEXT_DEV_SERVER&&(props.router||props.Component))throw Object.defineProperty(Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props"),"__NEXT_ERROR_CODE",{value:"E230",enumerable:!1,configurable:!0});let{App:EnhancedApp,Component:EnhancedComponent}="function"==typeof options?{App:App,Component:options(Component)}:{App:options.enhanceApp?options.enhanceApp(App):App,Component:options.enhanceComponent?options.enhanceComponent(Component):Component},stream=await renderShell(EnhancedApp,EnhancedComponent);return await stream.allReady,{html:await streamToString(stream),head}},documentCtx={...ctx,renderPage},docProps=await loadGetInitialProps(Document,documentCtx);if(isResSent(res)&&!isSSG)return null;if(!docProps||"string"!=typeof docProps.html)throw Object.definePropert
729A
y(Error(`"${getDisplayName(Document)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps,documentCtx}}Document.__NEXT_BUILTIN_DOCUMENT__;let renderShell=async(EnhancedApp,EnhancedComponent)=>{let EnhancedApp1,EnhancedComponent1,content=(EnhancedApp1=EnhancedApp||App,EnhancedComponent1=EnhancedComponent||Component,ctx.err&&ErrorDebug?(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})}):(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(AppContainerWithIsomorphicFiberStructure,{children:renderPageTree(EnhancedApp1,EnhancedComponent1,{...props,router})})}));return await function({ReactDOMServer,element,streamOptions}){return(0,tracer_.getTracer)().trace(trace_constants.AppRenderSpan.renderToReadableStream,async()=>ReactDOMServer.renderToReadableStream(element,streamOptions))}({ReactDOMServer:ReactDOMServerPages_default(),element:content})},hasDocumentGetInitialProps=!!Document.getInitialProps;if(hasDocumentGetInitialProps)if(null===(documentInitialPropsRes=await loadDocumentInitialProps(renderShell)))content=null;else{let{docProps}=documentInitialPropsRes;content=docProps.html}else{documentInitialPropsRes={};let stream=await renderShell(App,Component);await stream.allReady,content=await streamToString(stream)}let{docProps}=documentInitialPropsRes||{};hasDocumentGetInitialProps?(styles=docProps.styles,head=docProps.head):(styles=jsxStyleRegistry.styles(),jsxStyleRegistry.flush());let rawStyledJsxInsertedHTML=await renderToString((styles1=jsxStyleRegistry.styles(),jsxStyleRegistry.flush(),(0,jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment,{children:styles1})));return null===content?null:{contentHTML:rawStyledJsxInsertedHTML+content,documentElement:htmlProps=>(0,jsx_runtime_namespaceObject.jsx)(Document,{...htmlProps,...docProps}),head,headTags:[],styles}};(0,tracer_.getTracer)().setRootSpanAttribute("next.route",renderOpts.page);let documentResult=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderDocument,{spanName:`render route (pages) ${renderOpts.page}`,attributes:{"next.route":renderOpts.page}},async()=>renderDocument());if(!documentResult)return new RenderResult(null,{metadata,contentType:constants.HTML_CONTENT_TYPE_HEADER});let dynamicImportsIds=new Set,dynamicImports=new Set;for(let mod of reactLoadableModules){let manifestItem=reactLoadableManifest[mod];manifestItem&&(dynamicImportsIds.add(manifestItem.id),manifestItem.files.forEach(item=>{dynamicImports.add(item)}))}let docComponentsRendered={},{assetPrefix,defaultLocale,disableOptimizedLoading,domainLocales,locale,locales}=renderOpts,htmlProps={__NEXT_DATA__:{props,page:pathname,query,buildId:sharedContext.buildId,assetPrefix:""===assetPrefix?void 0:assetPrefix,nextExport:!0===nextExport||void 0,autoExport:!0===isAutoExport||void 0,isFallback,isExperimentalCompile,dynamicIds:0===dynamicImportsIds.size?void 0:Array.from(dynamicImportsIds),err:renderOpts.err?function(dev,err){if(dev){let source="server";return source=err[symbolError]||"server",{name:err.name,source,message:strip_ansi_default()(err.message),stack:err.stack,digest:err.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!!process.env.__NEXT_DEV_SERVER,renderOpts.err):void 0,gsp:!!getStaticProps||void 0,gssp:!!getServerSideProps||void 0,customServer:sharedContext.customServer,gip:!!hasPageGetInitialProps||void 0,appGip:!defaultAppGetInitialProps||void 0,locale,locales,defaultLocale,domainLocales,isPreview:!0===isPreview||void 0,notFoundSrcPage:notFoundSrcPage&&process.env.__NEXT_DEV_SERVER?notFoundSrcPage:void 0},nonce,buildManifest:filteredBuildManifest,docComponentsRendered,dangerousAsPath:router.asPath,isDevelopment:!!process.env.__NEXT_DEV_SERVER,deploymentId:sharedContext.deploymentId,dynamicImports:Array.from(dynamicImports),dynamicCssManifest:new Set(renderOpts.dynamicCssManifest||[]),assetPrefix,unstable_runtimeJS:void 0,unstable_JsPreload:pageConfig.unstable_JsPreload,assetQueryString:assetQueryString||"",mutableAssetQueryString:mutableAssetQueryString||"",scriptLoader,locale,disableOptimizedLoading,head:documentResult.head,headTags:documentResult.headTags,styles:documentResult.styles,crossOrigin:renderOpts.crossOrigin,optimizeCss:renderOpts.optimizeCss,nextConfigOutput:renderOpts.nextConfigOutput,nextScriptWorkers:renderOpts.nextScriptWorkers,runtime:globalRuntime,largePageDataBytes:renderOpts.largePageDataBytes,nextFontManifest:renderOpts.nextFontManifest,experimentalClientTraceMetadata:renderOpts.experimental.clientTraceMetadata},document=(0,jsx_runtime_namespaceObject.jsx)(HtmlContext.Provider,{value:htmlProps,children:documentResult.documentElement(htmlProps)}),documentHTML=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderToString,async()=>renderToString(document));{let nonRenderedComponents=[];for(let comp of["Main","Head","NextScript","Html"])docComponentsRendered[comp]||nonRenderedComponents.push(comp);if(nonRenderedComponents.length){let missingComponentList=nonRenderedComponents.map(e=>`<${e} />`).join(", "),plural=1!==nonRenderedComponents.length?"s":"";console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${plural}.
 Missing component${plural}: ${missingComponentList}
 Read how to fix here: https://nextjs.org/docs/messages/missing-document-component`)}}let[renderTargetPrefix,renderTargetSuffix]=documentHTML.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),prefix="";documentHTML.startsWith(DOCTYPE)||(prefix+=DOCTYPE);let content=(prefix+=renderTargetPrefix)+documentResult.contentHTML+renderTargetSuffix;return new RenderResult(await postProcessHTML(content,renderOpts),{metadata,contentType:constants.HTML_CONTENT_TYPE_HEADER})}let renderToHTML=(req,res,pathname,query,renderOpts,sharedContext,renderContext)=>renderToHTMLImpl(req,res,pathname,query,renderOpts,renderOpts,sharedContext,renderContext),ServerInsertedHTMLContext=external_react_default().createContext(null);function useServerInsertedHTML(callback){let addInsertedServerHTMLCallback=(0,external_react_namespaceObject.useContext)(ServerInsertedHTMLContext);addInsertedServerHTMLCallback&&addInsertedServerHTMLCallback(callback)}class PagesRouteModule extends RouteModule{constructor(options){super(options),this.components=options.components}render(req,res,context){return renderToHTMLImpl(req,res,context.page,context.query,context.renderOpts,{App:this.components.App,Document:this.components.Document},context.sharedContext,context.renderContext)}}let vendored={contexts:entrypoints_namespaceObject},pages_module=PagesRouteModule})(),module.exports=__webpack_exports__})();
 //# sourceMappingURL=pages-turbo.runtime.dev.js.map
\ No newline at end of file
pages-turbo...time.prod.js
@@ -16,5 +16,5 @@ See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerend
 To never revalidate, you can set revalidate to \`false\` (only ran once at build-time).
 To revalidate as soon as possible, you can set the value to \`1\`.`),"__NEXT_ERROR_CODE",{value:"E311",enumerable:!1,configurable:!0});else e.revalidate>31536e3&&console.warn(`Warning: A page's revalidate option was set to more than a year for ${a.url}. This may have been done in error.
 To only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`),t=e.revalidate;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number for ${a.url}. Mixed numbers, such as '${e.revalidate}', cannot be used.
-Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(e.revalidate)}' for ${a.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else t=!1;if(h.pageProps=Object.assign({},h.pageProps,"props"in e?e.props:void 0),g.cacheControl={revalidate:t,expire:void 0},g.pageData=h,g.isNotFound)return new e5(null,{metadata:g,contentType:null})}if(R&&(h.__N_SSP=!0),R&&!F){let e,t=!1;try{e=await (0,eL.getTracer)().trace(eU.vr.getServerSideProps,{spanName:`getServerSideProps ${i}`,attributes:{"next.route":i}},async()=>R({req:a,res:n,query:s,resolvedUrl:o.resolvedUrl,...J?{params:C}:void 0,...!1!==d?{draftMode:!0,preview:!0,previewData:d}:void 0,locales:[...o.locales??[]],locale:o.locale,defaultLocale:o.defaultLocale})),g.cacheControl={revalidate:0,expire:void 0}}catch(e){throw"object"==typeof e&&null!==e&&"name"in e&&"message"in e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Object.defineProperty(Error(k.UO),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(e.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(r.length)throw Object.defineProperty(Error(rv("getServerSideProps",r)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in e&&e.notFound){if("/404"===i)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return g.isNotFound=!0,new e5(null,{metadata:g,contentType:null})}if("redirect"in e&&"object"==typeof e.redirect&&(ry(e.redirect,a,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:t2(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),g.isRedirect=!0),t&&(e.props=await e.props),H&&!tH(i,"getServerSideProps",e.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});h.pageProps=Object.assign({},h.pageProps,e.props),g.pageData=h}if(w&&!U||g.isRedirect)return new e5(JSON.stringify(h),{metadata:g,contentType:k.U2})
992E
;if(F&&(h.pageProps={}),B(n)&&!U)return e5.EMPTY;let eg=b;if(Z&&J){let e,t=(e=eE(eb(i))).startsWith("/index/")&&!A(e)?e.slice(6):"/index"!==e?e:"/";t in eg.pages&&(eg={...eg,pages:{...eg.pages,[t]:[...eg.pages[t],...eg.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:eg.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let ey=({children:e})=>(0,tj.jsx)("div",{id:"__next",children:e}),ex=async()=>{let e,t,r;async function a(e){let t=async(t={})=>{if(ep.err&&x)return e&&e(N,M),{html:await rf((0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})})),head:en};let{App:r,Component:a}="function"==typeof t?{App:N,Component:t(M)}:{App:t.enhanceApp?t.enhanceApp(N):N,Component:t.enhanceComponent?t.enhanceComponent(M):M},n=await e(r,a);return await n.allReady,{html:await eG(n),head:en}},r={...ep,renderPage:t},a=await W(I,r);if(B(n)&&!U)return null;if(!a||"string"!=typeof a.html)throw Object.defineProperty(Error(`"${G(I)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps:a,documentCtx:r}}I.__NEXT_BUILTIN_DOCUMENT__;let i=async(e,t)=>{let r,a,n=(r=e||N,a=t||M,ep.err&&x?(0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})}):(0,tj.jsx)(ey,{children:(0,tj.jsx)(eh,{children:rg(r,a,{...h,router:ee})})}));return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eL.getTracer)().trace(eU.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:tk(),element:n})},s=!!I.getInitialProps,[o,l]=await Promise.all([rf((r=ea.styles(),ea.flush(),(0,tj.jsx)(tj.Fragment,{children:r}))),(async()=>{if(s){if(null===(e=await a(i)))return null;let{docProps:t}=e;return t.html}{e={};let t=await i(N,M);return await t.allReady,eG(t)}})()]);if(null===l)return null;let{docProps:c}=e||{};return s?(t=c.styles,en=c.head):(t=ea.styles(),ea.flush()),{contentHTML:o+l,documentElement:e=>(0,tj.jsx)(I,{...e,...c}),head:en,headTags:[],styles:t}};(0,eL.getTracer)().setRootSpanAttribute("next.route",o.page);let e_=await (0,eL.getTracer)().trace(eU.vr.renderDocument,{spanName:`render route (pages) ${o.page}`,attributes:{"next.route":o.page}},async()=>ex());if(!e_)return new e5(null,{metadata:g,contentType:k.j9});let eP=new Set,eR=new Set;for(let e of es){let t=E[e];t&&(eP.add(t.id),t.files.forEach(e=>{eR.add(e)}))}let{assetPrefix:ew,defaultLocale:eC,disableOptimizedLoading:eS,domainLocales:eO,locale:eT,locales:eA}=o,ej={__NEXT_DATA__:{props:h,page:i,query:s,buildId:c.buildId,assetPrefix:""===ew?void 0:ew,nextExport:!0===em||void 0,autoExport:!0===Z||void 0,isFallback:F,isExperimentalCompile:D,dynamicIds:0===eP.size?void 0:Array.from(eP),err:o.err?function(e,t){if(e){let e="server";return e=t[ru]||"server",{name:t.name,source:e,message:t9()(t.message),stack:t.stack,digest:t.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!1,o.err):void 0,gsp:!!_||void 0,gssp:!!R||void 0,customServer:c.customServer,gip:!!X||void 0,appGip:!z||void 0,locale:eT,locales:eA,defaultLocale:eC,domainLocales:eO,isPreview:!0===p||void 0,notFoundSrcPage:void 0},nonce:ec,buildManifest:eg,docComponentsRendered:{},dangerousAsPath:ee.asPath,isDevelopment:!1,deploymentId:c.deploymentId,dynamicImports:Array.from(eR),dynamicCssManifest:new Set(o.dynamicCssManifest||[]),assetPrefix:ew,unstable_runtimeJS:y.unstable_runtimeJS,unstable_JsPreload:y.unstable_JsPreload,assetQueryString:m||"",mutableAssetQueryString:f||"",scriptLoader:er,locale:eT,disableOptimizedLoading:eS,head:e_.head,headTags:e_.headTags,styles:e_.styles,crossOrigin:o.crossOrigin,optimizeCss:o.optimizeCss,nextConfigOutput:o.nextConfigOutput,nextScriptWorkers:o.nextScriptWorkers,runtime:j,largePageDataBytes:o.largePageDataBytes,nextFontManifest:o.nextFontManifest,experimentalClientTraceMetadata:o.experimental.clientTraceMetadata},eD=(0,tj.jsx)(tY.Provider,{value:ej,children:e_.documentElement(ej)}),e$=await (0,eL.getTracer)().trace(eU.vr.renderToString,async()=>rf(eD)),[eN,ek]=e$.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),eI="";e$.startsWith(rh)||(eI+=rh);let eM=(eI+=eN)+e_.contentHTML+ek;return new e5(await r(eM,o),{metadata:g,contentType:k.j9})}let rE=(e,t,r,a,n,i,s)=>rb(e,t,r,a,n,n,i,s),rx=t$().createContext(null);function r_(e){let t=(0,tD.useContext)(rx);t&&t(e)}class rP extends tA{constructor(e){super(e),this.components=e.components}render(e,t,r){return rb(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document},r.sharedContext,r.renderContext)}}let rR={contexts:y},rw=rP})(),module.exports=i})();
+Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(e.revalidate)}' for ${a.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else t=!1;if(h.pageProps=Object.assign({},h.pageProps,"props"in e?e.props:void 0),g.cacheControl={revalidate:t,expire:void 0},g.pageData=h,g.isNotFound)return new e5(null,{metadata:g,contentType:null})}if(R&&(h.__N_SSP=!0),R&&!F){let e,t=!1;try{e=await (0,eL.getTracer)().trace(eU.vr.getServerSideProps,{spanName:`getServerSideProps ${i}`,attributes:{"next.route":i}},async()=>R({req:a,res:n,query:s,resolvedUrl:o.resolvedUrl,...J?{params:C}:void 0,...!1!==d?{draftMode:!0,preview:!0,previewData:d}:void 0,locales:[...o.locales??[]],locale:o.locale,defaultLocale:o.defaultLocale})),g.cacheControl={revalidate:0,expire:void 0}}catch(e){throw"object"==typeof e&&null!==e&&"name"in e&&"message"in e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Object.defineProperty(Error(k.UO),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(e.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(r.length)throw Object.defineProperty(Error(rv("getServerSideProps",r)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in e&&e.notFound){if("/404"===i)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return g.isNotFound=!0,new e5(null,{metadata:g,contentType:null})}if("redirect"in e&&"object"==typeof e.redirect&&(ry(e.redirect,a,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:t2(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),g.isRedirect=!0),t&&(e.props=await e.props),H&&!tH(i,"getServerSideProps",e.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});h.pageProps=Object.assign({},h.pageProps,e.props),g.pageData=h}if(w&&!U||g.isRedirect)return new e5(JSON.stringify(h),{metadata:g,contentType:k.U2});if(F&&(h.pageProps={}),B(n)&&!U)return e5.EMPTY;let eg=b;if(Z&&J){let e,t=(e=eE(eb(i))).startsWith("/index/")&&!A(e)?e.slice(6):"/index"!==e?e:"/";t in eg.pages&&(eg={...eg,pages:{...eg.pages,[t]:[...eg.pages[t],...eg.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:eg.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let ey=({children:e})=>(0,tj.jsx)("div",{id:"__next",children:e}),ex=async()=>{let e,t,r,a;async function i(e){let t=async(t={})=>{if(ep.err&&x)return e&&e(N,M),{html:await rf((0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})})),head:en};let{App:r,Component:a}="function"==typeof t?{App:N,Component:t(M)}:{App:t.enhanceApp?t.enhanceApp(N):N,Component:t.enhanceComponent?t.enhanceComponent(M):M},n=await e(r,a);return await n.allReady,{html:await eG(n),head:en}},r={...ep,renderPage:t},a=await W(I,r);if(B(n)&&!U)return null;if(!a||"string"!=typeof a.html)throw Object.defineProperty(Error(`"${G(I)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps:a,documentCtx:r}}I.__NEXT_BUILTIN_DOCUMENT__;let s=async(e,t)=>{let r,a,n=(r=e||N,a=t||M,ep.err&&x?(0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})}):(0,tj.jsx)(ey,{children:(0,tj.jsx)(eh,{children:rg(r,a,{...h,router:ee})})}));return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eL.getTracer)().trace(eU.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:tk(),element:n})},o=!!I.getInitialProps;if(o)if(null===(e=await i(s)))t=null;else{let{docProps:r}=e;t=r.html}else{e={};let r=await s(N,M);await r.allReady,t=await eG(r)}let{docProps:l}=e||{};o?(r=l.styles,en=l.head):(r=ea.styles(),ea.flush());let c=await rf((a=ea.styles(),ea.flush(),(0,tj.jsx)(tj.Fragment,{children:a})));return null===t?null:{contentHTML:c+t,documentElement:e=>(0,tj.jsx)(I,{...e,...l}),head:en,headTags:[],styles:r}};(0,eL.getTracer)().setRootSpanAttribute("next.route",o.page);let e_=await (0,eL.getTracer)().trace(eU.vr.renderDocument,{spanName:`render route (pages) ${o.page}`,attributes:{"next.route":o.page}},async()=>ex());if(!e_)return new e5(null,{metadata:g,contentType:k.j9});let eP=new Set,eR=new Set;for(let e of es){let t=E[e];t&&(eP.add(t.id),t.files.forEach(e=>{eR.add(e)}))}let{assetPrefix:ew,defaultLocale:eC,disableOptimizedLoading:eS,domainLocales:eO,locale:eT,locales:eA}=o,ej={__NEXT_DATA__:{props:h,page:i,query:s,buildId:c.buildId,assetPrefix:""===ew?void 0:ew,nextExport:!0===em||void 0,autoExport:!0===Z||void 0,isFallback:F,isExperimentalCompile:D,dynamicIds:0===eP.size?void 0:Array.from(eP),err:o.err?function(e,t){if(e){let e="server";return e=t[ru]||"server",{name:t.name,source:e,message:t9()(t.message),stack:t.stack,digest:t.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!1,o.err):void 0,gsp:!!_||void 0,gssp:!!R||void 0,customServer:c.customServer,gip:!!X||void 0,appGip:!z||void 0,locale:eT,locales:eA,defaultLocale:eC,domainLocales:eO,isPreview:!0===p||void 0,notFoundSrcPage:void 0},nonce:ec,buildManifest:eg,docComponentsRendered:{},dangerousAsPath:ee.asPath,isDevelopment:!1,deploymentId:c.deploymentId,dynamicImports:Array.from(eR),dynamicCssManifest:new Set(o.dynamicCssManifest||[]),assetPrefix:ew,unstable_runtimeJS:y.unstable_runtimeJS,unstable_JsPreload:y.unstable_JsPreload,assetQueryString:m||"",mutableAssetQueryString:f||"",scriptLoader:er,locale:eT,disableOptimizedLoading:eS,head:e_.head,headTags:e_.headTags,styles:e_.styles,crossOrigin:o.crossOrigin,optimizeCss:o.optimizeCss,nextConfigOutput:o.nextConfigOutput,nextScriptWorkers:o.nextScriptWorkers,runtime:j,largePageDataBytes:o.largePageDataBytes,nextFontManifest:o.nextFontManifest,experimentalClientTraceMetadata:o.experimental.clientTraceMetadata},eD=(0,tj.jsx)(tY.Provider,{value:ej,children:e_.documentElement(ej)}),e$=await (0,eL.getTracer)().trace(eU.vr.renderToString,async()=>rf(eD)),[eN,ek]=e$.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),eI="";e$.startsWith(rh)||(eI+=rh);let eM=(eI+=eN)+e_.contentHTML+ek;return new e5(await r(eM,o),{metadata:g,contentType:k.j9})}let rE=(e,t,r,a,n,i,s)=>rb(e,t,r,a,n,n,i,s),rx=t$().createContext(null);function r_(e){let t=(0,tD.useContext)(rx);t&&t(e)}class rP extends tA{constructor(e){super(e),this.components=e.components}render(e,t,r){return rb(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document},r.sharedContext,r.renderContext)}}let rR={contexts:y},rw=rP})(),module.exports=i})();
 //# sourceMappingURL=pages-turbo.runtime.prod.js.map
\ No newline at end of file
pages.runtime.dev.js
@@ -19,7 +19,7 @@ To revalidate as soon as possible, you can set the value to \`1\`.`),"__NEXT_ERR
 To only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`),revalidate=data.revalidate;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number for ${req.url}. Mixed numbers, such as '${data.revalidate}', cannot be used.
 Try changing the value to '${Math.ceil(data.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===data.revalidate)revalidate=1;else if(!1===data.revalidate||void 0===data.revalidate)revalidate=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(data.revalidate)}' for ${req.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else revalidate=!1;if(props.pageProps=Object.assign({},props.pageProps,"props"in data?data.props:void 0),metadata.cacheControl={revalidate,expire:void 0},metadata.pageData=props,metadata.isNotFound)return new RenderResult(null,{metadata,contentType:null})}if(getServerSideProps&&(props.__N_SSP=!0),getServerSideProps&&!isFallback){let data,canAccessRes=!0,resOrProxy=res,deferredContent=!1;resOrProxy=new Proxy(res,{get:function(obj,prop){if(!canAccessRes){let message=`You should not access 'res' after getServerSideProps resolves.
 Read more: https://nextjs.org/docs/messages/gssp-no-mutating-res`;if(deferredContent)throw Object.defineProperty(Error(message),"__NEXT_ERROR_CODE",{value:"E1028",enumerable:!1,configurable:!0});warn(message)}return reflect.ReflectAdapter.get(obj,prop,res)}});try{data=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.getServerSideProps,{spanName:`getServerSideProps ${pathname}`,attributes:{"next.route":pathname}},async()=>getServerSideProps({req:req,res:resOrProxy,query,resolvedUrl:renderOpts.resolvedUrl,...pageIsDynamic?{params}:void 0,...!1!==previewData?{draftMode:!0,preview:!0,previewData:previewData}:void 0,locales:[...renderOpts.locales??[]],locale:renderOpts.locale,defaultLocale:renderOpts.defaultLocale})),canAccessRes=!1,metadata.cacheControl={revalidate:0,expire:void 0}}catch(serverSidePropsError){throw"object"==typeof serverSidePropsError&&null!==serverSidePropsError&&"name"in serverSidePropsError&&"message"in serverSidePropsError&&"ENOENT"===serverSidePropsError.code&&delete serverSidePropsError.code,serverSidePropsError}if(null==data)throw Object.defineProperty(Error(constants.GSSP_NO_RETURNED_VALUE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});data.props instanceof Promise&&(
7292
deferredContent=!0);let invalidKeys=Object.keys(data).filter(key=>"props"!==key&&"redirect"!==key&&"notFound"!==key);if(data.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${pathname}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(data.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${pathname}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(invalidKeys.length)throw Object.defineProperty(Error(invalidKeysMsg("getServerSideProps",invalidKeys)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in data&&data.notFound){if("/404"===pathname)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return metadata.isNotFound=!0,new RenderResult(null,{metadata,contentType:null})}if("redirect"in data&&"object"==typeof data.redirect&&(checkRedirectValues(data.redirect,req,"getServerSideProps"),data.props={__N_REDIRECT:data.redirect.destination,__N_REDIRECT_STATUS:getRedirectStatus(data.redirect)},void 0!==data.redirect.basePath&&(data.props.__N_REDIRECT_BASE_PATH=data.redirect.basePath),metadata.isRedirect=!0),deferredContent&&(data.props=await data.props),(process.env.__NEXT_DEV_SERVER||isBuildTimeSSG)&&!isSerializableProps(pathname,"getServerSideProps",data.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});props.pageProps=Object.assign({},props.pageProps,data.props),metadata.pageData=props}if(!isSSG&&!getServerSideProps&&Object.keys((null==props?void 0:props.pageProps)||{}).includes("url")&&console.warn(`The prop \`url\` is a reserved prop in Next.js for legacy reasons and will be overridden on page ${pathname}
-See more info here: https://nextjs.org/docs/messages/reserved-page-prop`),isNextDataRequest&&!isSSG||metadata.isRedirect)return new RenderResult(JSON.stringify(props),{metadata,contentType:constants.JSON_CONTENT_TYPE_HEADER});if(isFallback&&(props.pageProps={}),isResSent(res)&&!isSSG)return RenderResult.EMPTY;let filteredBuildManifest=buildManifest;if(isAutoExport&&pageIsDynamic){let _page,page=(_page=normalizePathSep(normalizePagePath(pathname))).startsWith("/index/")&&!isDynamicRoute(_page)?_page.slice(6):"/index"!==_page?_page:"/";page in filteredBuildManifest.pages&&(filteredBuildManifest={...filteredBuildManifest,pages:{...filteredBuildManifest.pages,[page]:[...filteredBuildManifest.pages[page],...filteredBuildManifest.lowPriorityFiles.filter(f=>f.includes("_buildManifest"))]},lowPriorityFiles:filteredBuildManifest.lowPriorityFiles.filter(f=>!f.includes("_buildManifest"))})}let Body=({children})=>(0,jsx_runtime_namespaceObject.jsx)("div",{id:"__next",children:children}),renderDocument=async()=>{let documentInitialPropsRes,styles,styles1;async function loadDocumentInitialProps(renderShell){let renderPage=async(options={})=>{if(ctx.err&&ErrorDebug)return renderShell&&renderShell(App,Component),{html:await renderToString((0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})})),head};if(process.env.__NEXT_DEV_SERVER&&(props.router||props.Component))throw Object.defineProperty(Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props"),"__NEXT_ERROR_CODE",{value:"E230",enumerable:!1,configurable:!0});let{App:EnhancedApp,Component:EnhancedComponent}="function"==typeof options?{App:App,Component:options(Component)}:{App:options.enhanceApp?options.enhanceApp(App):App,Component:options.enhanceComponent?options.enhanceComponent(Component):Component},stream=await renderShell(EnhancedApp,EnhancedComponent);return await stream.allReady,{html:await streamToString(stream),head}},documentCtx={...ctx,renderPage},docProps=await loadGetInitialProps(Document,documentCtx);if(isResSent(res)&&!isSSG)return null;if(!docProps||"string"!=typeof docProps.html)throw Object.defineProperty(Error(`"${getDisplayName(Document)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps,documentCtx}}Document.__NEXT_BUILTIN_DOCUMENT__;let renderShell=async(EnhancedApp,EnhancedComponent)=>{let EnhancedApp1,EnhancedComponent1,content=(EnhancedApp1=EnhancedApp||App,EnhancedComponent1=EnhancedComponent||Component,ctx.err&&ErrorDebug?(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})}):(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(AppContainerWithIsomorphicFiberStructure,{children:renderPageTree(EnhancedApp1,EnhancedComponent1,{...props,router})})}));return await function({ReactDOMServer,element,streamOptions}){return(0,tracer_.getTracer)().trace(trace_constants.AppRenderSpan.renderToReadableStream,async()=>ReactDOMServer.renderToReadableStream(element,streamOptions))}({ReactDOMServer:ReactDOMServerPages_default(),element:content})},hasDocumentGetInitialProps=!!Document.getInitialProps,[rawStyledJsxInsertedHTML,content]=await Promise.all([renderToString((styles1=jsxStyleRegistry.styles(),jsxStyleRegistry.flush(),(0,jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment,{children:styles1}))),(async()=>{if(hasDocumentGetInitialProps){if(null===(documentInitialPropsRes=await loadDocumentInitialProps(renderShell)))return null;let{docProps}=documentInitialPropsRes;return docProps.html}{documentInitialPropsRes={};let stream=await renderShell(App,Component);return await stream.allReady,streamToString(stream)}})()]);if(null===content)return null;let{docProps}=documentInitialPropsRes||{};return hasDocumentGetInitialProps?(styles=docProps.styles,head=docProps.head):(styles=jsxStyleRegistry.styles(),jsxStyleRegistry.flush()),{contentHTML:rawStyledJsxInsertedHTML+content,documentElement:htmlProps=>(0,jsx_runtime_namespaceObject.jsx)(Document,{...htmlProps,...docProps}),head,headTags:[],styles}};(0,tracer_.getTracer)().setRootSpanAttribute("next.route",renderOpts.page);let documentResult=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderDocument,{spanName:`render route (pages) ${renderOpts.page}`,attributes:{"next.route":renderOpts.page}},async()=>renderDocument());if(!documentResult)return new RenderResult(null,{metadata,contentType:constants.HTML_CONTENT_TYPE_HEADER});let dynamicImportsIds=new Set,dynamicImports=new Set;for(let mod of reactLoadableModules){let manifestItem=reactLoadableManifest[mod];manifestItem&&(dynamicImportsIds.add(manifestItem.id),manifestItem.files.forEach(item=>{dynamicImports.add(item)}))}let docComponentsRendered={},{assetPrefix,defaultLocale,disableOptimizedLoading,domainLocales,locale,locales}=renderOpts,htmlProps={__NEXT_DATA__:{props,page:pathname,query,buildId:sharedContext.buildId,assetPrefix:""===assetPrefix?void 0:assetPrefix,nextExport:!0===nextExport||void 0,autoExport:!0===isAutoExport||void 0,isFallback,isExperimentalCompile,dynamicIds:0===dynamicImportsIds.size?void 0:Array.from(dynamicImportsIds),err:renderOpts.err?function(dev,err){if(dev){let source="server";return source=err[symbolError]||"server",{name:err.name,source,message:strip_ansi_default()(err.message),stack:err.stack,digest:err.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!!process.env.__NEXT_DEV_SERVER,renderOpts.err):void 0,gsp:!!getStaticProps||void 0,gssp:!!getServerSideProps||void 0,customServer:sharedContext.customServer,gip:!!hasPageGetInitialProps||void 0,appGip:!defaultAppGetInitialProps||void 0,locale,locales,defaultLocale,domainLocales,isPreview:!0===isPreview||void 0,notFoundSrcPage:notFoundSrcPage&&process.env.__NEXT_DEV_SERVER?notFoundSrcPage:void 0},nonce,buildManifest:filteredBuildManifest,docComponentsRendered,dangerousAsPath:router.asPath,isDevelopment:!!process.env.__NEXT_DEV_SERVER,deploymentId:sharedContext.deploymentId,dynamicImports:Array.from(dynamicImports),dynamicCssManifest:new Set(renderOpts.dynamicCssManifest||[]),assetPrefix,unstable_runtimeJS:void 0,unstable_JsPreload:pageConfig.unstable_JsPreload,assetQueryString:assetQueryString||"",mutableAssetQueryString:mutableAssetQueryString||"",scriptLoader,locale,disableOptimizedLoading,head:documentResult.head,headTags:documentResult.headTags,styles:documentResult.styles,crossOrigin:renderOpts.crossOrigin,optimizeCss:renderOpts.optimizeCss,nextConfigOutput:renderOpts.nextConfigOutput,nextScriptWorkers:renderOpts.nextScriptWorkers,runtime:globalRuntime,largePageDataBytes:renderOpts.largePageDataBytes,nextFontManifest:renderOpts.nextFontManifest,experimentalClientTraceMetadata:renderOpts.experimental.clientTraceMetadata},document=(0,jsx_runtime_namespaceObject.jsx)(HtmlContext.Provider,{value:htmlProps,children:documentResult.documentElement(htmlProps)}),documentHTML=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderToString,async()=>renderToString(document));{let nonRenderedComponents=[];for(let comp of["Main","Head","NextScript","Html"])docComponentsRendered[comp]||nonRenderedComponents.push(comp);if(nonRenderedComponents.length){let missingComponentList=nonRenderedComponents.map(e=>`<${e} />`).join(", "),plural=1!==nonRenderedComponents.length?"s":"";console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${plural}.
+See more info here: https://nextjs.org/docs/messages/reserved-page-prop`),isNextDataRequest&&!isSSG||metadata.isRedirect)return new RenderResult(JSON.stringify(props),{metadata,contentType:constants.JSON_CONTENT_TYPE_HEADER});if(isFallback&&(props.pageProps={}),isResSent(res)&&!isSSG)return RenderResult.EMPTY;let filteredBuildManifest=buildManifest;if(isAutoExport&&pageIsDynamic){let _page,page=(_page=normalizePathSep(normalizePagePath(pathname))).startsWith("/index/")&&!isDynamicRoute(_page)?_page.slice(6):"/index"!==_page?_page:"/";page in filteredBuildManifest.pages&&(filteredBuildManifest={...filteredBuildManifest,pages:{...filteredBuildManifest.pages,[page]:[...filteredBuildManifest.pages[page],...filteredBuildManifest.lowPriorityFiles.filter(f=>f.includes("_buildManifest"))]},lowPriorityFiles:filteredBuildManifest.lowPriorityFiles.filter(f=>!f.includes("_buildManifest"))})}let Body=({children})=>(0,jsx_runtime_namespaceObject.jsx)("div",{id:"__next",children:children}),renderDocument=async()=>{let documentInitialPropsRes,content,styles,styles1;async function loadDocumentInitialProps(renderShell){let renderPage=async(options={})=>{if(ctx.err&&ErrorDebug)return renderShell&&renderShell(App,Component),{html:await renderToString((0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})})),head};if(process.env.__NEXT_DEV_SERVER&&(props.router||props.Component))throw Object.defineProperty(Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props"),"__NEXT_ERROR_CODE",{value:"E230",enumerable:!1,configurable:!0});let{App:EnhancedApp,Component:EnhancedComponent}="function"==typeof options?{App:App,Component:options(Component)}:{App:options.enhanceApp?options.enhanceApp(App):App,Component:options.enhanceComponent?options.enhanceComponent(Component):Component},stream=await renderShell(EnhancedApp,EnhancedComponent);return await stream.allReady,{html:await streamToString(stream),head}},documentCtx={...ctx,renderPage},docProps=await loadGetInitialProps(Document,documentCtx);if(isResSent(res)&&!isSSG)return null;if(!docProps||"string"!=typeof docProps.html)throw Object.defineProperty(Error(`"${getDisplayName(Document)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps,documentCtx}}Document.__NEXT_BUILTIN_DOCUMENT__;let renderShell=async(EnhancedApp,EnhancedComponent)=>{let EnhancedApp1,EnhancedComponent1,content=(EnhancedApp1=EnhancedApp||App,EnhancedComponent1=EnhancedComponent||Component,ctx.err&&ErrorDebug?(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(ErrorDebug,{})}):(0,jsx_runtime_namespaceObject.jsx)(Body,{children:(0,jsx_runtime_namespaceObject.jsx)(AppContainerWithIsomorphicFiberStructure,{children:renderPageTree(EnhancedApp1,EnhancedComponent1,{...props,router})})}));return await function({ReactDOMServer,element,streamOptions}){return(0,tracer_.getTracer)().trace(trace_constants.AppRenderSpan.renderToReadableStream,async()=>ReactDOMServer.renderToReadableStream(element,streamOptions))}({ReactDOMServer:ReactDOMServerPages_default(),element:content})},hasDocumentGetInitialProps=!!Document.getInitialProps;if(hasDocumentGetInitialProps)if(null===(documentInitialPropsRes=await loadDocumentInitialProps(renderShell)))content=null;else{let{docProps}=documentInitialPropsRes;content=docProps.html}else{documentInitialPropsRes={};let stream=await renderShell(App,Component);await stream.allReady,content=await streamToString(stream)}let{docProps}=documentInitialPropsRes||{};hasDocumentGetInitialProps?(styles=docProps.styles,head=docProps.head):(styles=jsxStyleRegistry.styles(),jsxStyleRegistry.flush());let rawStyledJsxInsertedHTML=await renderToString((styles1=jsxStyleRegistry.styles(),jsxStyleRegistry.flush(),(0,jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment,{children:styles1})));return null===content?null:{contentHTML:rawStyledJsxInsertedHTML+content,documentElement:htmlProps=>(0,jsx_runtime_namespaceObject.jsx)(Document,{...htmlProps,...docProps}),head,headTags:[],styles}};(0,tracer_.getTracer)().setRootSpanAttribute("next.route",renderOpts.page);let documentResult=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderDocument,{spanName:`render route (pages) ${renderOpts.page}`,attributes:{"next.route":renderOpts.page}},async()=>renderDocument());if(!documentResult)return new RenderResult(null,{metadata,contentType:constants.HTML_CONTENT_TYPE_HEADER});let dynamicImportsIds=new Set,dynamicImports=new Set;for(let mod of reactLoadableModules){let manifestItem=reactLoadableManifest[mod];manifestItem&&(dynamicImportsIds.add(manifestItem.id),manifestItem.files.forEach(item=>{dynamicImports.add(item)}))}let docComponentsRendered={},{assetPrefix,defaultLocale,disableOptimizedLoading,domainLocales,locale,locales}=renderOpts,htmlProps={__NEXT_DATA__:{props,page:pathname,query,buildId:sharedContext.buildId,assetPrefix:""===assetPrefix?void 0:assetPrefix,nextExport:!0===nextExport||void 0,autoExport:!0===isAutoExport||void 0,isFallback,isExperimentalCompile,dynamicIds:0===dynamicImportsIds.size?void 0:Array.from(dynamicImportsIds),err:renderOpts.err?function(dev,err){if(dev){let source="server";return source=err[symbolError]||"server",{name:err.name,source,message:strip_ansi_default()(err.message),stack:err.stack,digest:err.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!!process.env.__NEXT_DEV_SERVER,renderOpts.err):void 0,gsp:!!getStaticProps||void 0,gssp:!!getServerSideProps||void 0,customServer:sharedContext.customServer,gip:!!hasPageGetInitialProps||void 0,appGip:!defaultAppGetInitialProps||void 0,locale,locales,defaultLocale,domainLocales,isPreview:!0===isPreview||void 0,notFoundSrcPage:notFoundSrcPage&&process.env.__NEXT_DEV_SERVER?notFoundSrcPage:void 0},nonce,buildManifest:filteredBuildManifest,docComponentsRendered,dangerousAsPath:router.asPath,isDevelopment:!!process.env.__NEXT_DEV_SERVER,deploymentId:sharedContext.deploymentId,dynamicImports:Array.from(dynamicImports),dynamicCssManifest:new Set(renderOpts.dynamicCssManifest||[]),assetPrefix,unstable_runtimeJS:void 0,unstable_JsPreload:pageConfig.unstable_JsPreload,assetQueryString:assetQueryString||"",mutableAssetQueryString:mutableAssetQueryString||"",scriptLoader,locale,disableOptimizedLoading,head:documentResult.head,headTags:documentResult.headTags,styles:documentResult.styles,crossOrigin:renderOpts.crossOrigin,optimizeCss:renderOpts.optimizeCss,nextConfigOutput:renderOpts.nextConfigOutput,nextScriptWorkers:renderOpts.nextScriptWorkers,runtime:globalRuntime,largePageDataBytes:renderOpts.largePageDataBytes,nextFontManifest:renderOpts.nextFontManifest,experimentalClientTraceMetadata:renderOpts.experimental.clientTraceMetadata},document=(0,jsx_runtime_namespaceObject.jsx)(HtmlContext.Provider,{value:htmlProps,children:documentResult.documentElement(htmlProps)}),documentHTML=await (0,tracer_.getTracer)().trace(trace_constants.RenderSpan.renderToString,async()=>renderToString(document));{let nonRenderedComponents=[];for(let comp of["Main","Head","NextScript","Html"])docComponentsRendered[comp]||nonRenderedComponents.push(comp);if(nonRenderedComponents.length){let missingComponentList=nonRenderedComponents.map(e=>`<${e} />`).join(", "),plural=1!==nonRenderedComponents.length?"s":"";console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${plural}.
 Missing component${plural}: ${missingComponentList}
 Read how to fix here: https://nextjs.org/docs/messages/missing-document-component`)}}let[renderTargetPrefix,renderTargetSuffix]=documentHTML.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),prefix="";documentHTML.startsWith(DOCTYPE)||(prefix+=DOCTYPE);let content=(prefix+=renderTargetPrefix)+documentResult.contentHTML+renderTargetSuffix;return new RenderResult(await postProcessHTML(content,renderOpts),{metadata,contentType:constants.HTML_CONTENT_TYPE_HEADER})}let renderToHTML=(req,res,pathname,query,renderOpts,sharedContext,renderContext)=>renderToHTMLImpl(req,res,pathname,query,renderOpts,renderOpts,sharedContext,renderContext),ServerInsertedHTMLContext=external_react_default().createContext(null);function useServerInsertedHTML(callback){let addInsertedServerHTMLCallback=(0,external_react_namespaceObject.useContext)(ServerInsertedHTMLContext);addInsertedServerHTMLCallback&&addInsertedServerHTMLCallback(callback)}class PagesRouteModule extends RouteModule{constructor(options){super(options),this.components=options.components}render(req,res,context){return renderToHTMLImpl(req,res,context.page,context.query,context.renderOpts,{App:this.components.App,Document:this.components.Document},context.sharedContext,context.renderContext)}}let vendored={contexts:entrypoints_namespaceObject},pages_module=PagesRouteModule})(),module.exports=__webpack_exports__})();
 //# sourceMappingURL=pages.runtime.dev.js.map
\ No newline at end of file
pages.runtime.prod.js
@@ -16,5 +16,5 @@ See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerend
 To never revalidate, you can set revalidate to \`false\` (only ran once at build-time).
 To revalidate as soon as possible, you can set the value to \`1\`.`),"__NEXT_ERROR_CODE",{value:"E311",enumerable:!1,configurable:!0});else e.revalidate>31536e3&&console.warn(`Warning: A page's revalidate option was set to more than a year for ${a.url}. This may have been done in error.
 To only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`),t=e.revalidate;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number for ${a.url}. Mixed numbers, such as '${e.revalidate}', cannot be used.
-Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(e.revalidate)}' for ${a.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else t=!1;if(h.pageProps=Object.assign({},h.pageProps,"props"in e?e.props:void 0),g.cacheControl={revalidate:t,expire:void 0},g.pageData=h,g.isNotFound)return new e5(null,{metadata:g,contentType:null})}if(R&&(h.__N_SSP=!0),R&&!F){let e,t=!1;try{e=await (0,eL.getTracer)().trace(eU.vr.getServerSideProps,{spanName:`getServerSideProps ${i}`,attributes:{"next.route":i}},async()=>R({req:a,res:n,query:s,resolvedUrl:o.resolvedUrl,...J?{params:C}:void 0,...!1!==d?{draftMode:!0,preview:!0,previewData:d}:void 0,locales:[...o.locales??[]],locale:o.locale,defaultLocale:o.defaultLocale})),g.cacheControl={revalidate:0,expire:void 0}}catch(e){throw"object"==typeof e&&null!==e&&"name"in e&&"message"in e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Object.defineProperty(Error(k.UO),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(e.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(r.length)throw Object.defineProperty(Error(rv("getServerSideProps",r)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in e&&e.notFound){if("/404"===i)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return g.isNotFound=!0,new e5(null,{metadata:g,contentType:null})}if("redirect"in e&&"object"==typeof e.redirect&&(ry(e.redirect,a,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:t2(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),g.isRedirect=!0),t&&(e.props=await e.props),H&&!tH(i,"getServerSideProps",e.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});h.pageProps=Object.assign({},h.pageProps,e.props),g.pageData=h}if(w&&!U||g.isRedirect)return new e5(JSON.stringify(h),{metadata:g,contentType:k.U2});if(F&&(h.pageProps={}),B(n)&&!U)return e5.EMPTY;let eg=b;if(Z&&J){let e,t=(e=eE(eb(i))).startsWith("/index/")&&!A(e)?e.slice(6):"/index"!==e?e:"/";t in eg.pages&&(eg={...eg,pages:{...eg.pages,[t]:[...eg.pages[t],...eg.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:eg.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let ey=({children:e})=>(0,tj.jsx)("div",{id:"__next",children:e}),ex=async()=>{let e,t,r;async function a(e){let t=async(t={})=>{if(ep.err&&x)return e&&e(N,M),{html:await rf((0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})})),head:en};let{App:r,Component:a}="function"==typeof t?{App:N,Component:t(M)}:{App:t.enhanceApp?t.enhanceApp(N):N,Component:t.enhanceComponent?t.enhanceComponent(M):M},n=await e(r,a);return await n.allReady,{html:await eG(n),head:en}},r={...ep,renderPage:t},a=await W(I,r);if(B(n)&&!U)return null;if(!a||"string"!=typeof a.html)throw Object.defineProperty(Error(`"${G(I)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps:a,documentCtx:r}}I.__NEXT_BUILTIN_DOCUMENT__;let i=async(e,t)=>{let r,a,n=(r=e||N,a=t||M,ep.err&&x?(0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})}):(0,tj.jsx)(ey,{children:(0,tj.jsx)(eh,{children:rg(r,a,{...h,router:ee})})}));return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eL.getTracer)().trace(eU.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:tk(),element:n})},s=!!I.getInitialProps,[o,l]=await Promise.all([rf((r=ea.styles(),ea.flush(),(0,tj.jsx)(tj.Fragment,{children:r}))),(async()=>{if(s){if(null===(e=await a(i)))return null;let{docProps:t}=e;return t.html}{e={};let t=await i(N,M);return await t.allReady,eG(t)}})()]);if(null===l)return null;let{docProps:c}=e||{};return s?(t=c.styles,en=c.head):(t=ea.styles(),ea.flush()),{contentHTML:o+l,documentElement:e=>(0,tj.jsx)(I,{...e,...c}),head:en,headTags:[],styles:t}};(0,eL.getTracer)().setRootSpanAttribute("next.route",o.page);let e_=await (0,eL.getTracer)().trace(eU.vr.renderDocument,{spanName:`render route (pages) ${o.page}`,attributes:{"next.route":o.page}},async()=>ex());if(!e_)return new e5(null,{metadata:g,contentType:k.j9});let eP=new Set,eR=new Set;for(let e of es){let t=E[e];t&&(eP.add(t.id),t.files.forEach(e=>{eR.add(e)}))}let{assetPrefix:ew,defaultLocale:eC,disableOptimizedLoading:eS,domainLocales:eO,locale:eT,locales:eA}=o,ej={__NEXT_DATA__:{props:h,page:i,query:s,buildId:c.buildId,assetPrefix:""===ew?void 0:ew,nextExport:!0===em||void 0,autoExport:!0===Z||void 0,isFallback:F,isExperimentalCompile:D,dynamicIds:0===eP.size?void 0:Array.from(eP),err:o.err?function(e,t){if(e){let e="server";return e=t[ru]||"server",{name:t.name,source:e,message:t9()(t.message),stack:t.stack,digest:t.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!1,o.err):void 0,gsp:!!_||void 0,gssp:!!R||void 0,customServer:c.customServer,gip:!!X||void 0,appGip:!q||void 0,locale:eT,locales:eA,defaultLocale:eC,domainLocales:eO,isPreview:!0===p||void 0,notFoundSrcPage:void 0},nonce:ec,buildManifest:eg,docComponentsRendered:{},dangerousAsPath:ee.asPath,isDevelopment:!1,deploymentId:c.deploymentId,dynamicImports:Array.from(eR),dynamicCssManifest:new Set(o.dynamicCssManifest||[]),assetPrefix:ew,unstable_runtimeJS:y.unstable_runtimeJS,unstable_JsPreload:y.unstable_JsPreload,assetQueryString:m||"",mutableAssetQueryString:f||"",scriptLoader:er,locale:eT,disableOptimizedLoading:eS,head:e_.head,headTags:e_.headTags,styles:e_.styles,crossOrigin:o.crossOrigin,optimizeCss:o.optimizeCss,nextConfigOutput:o.nextConfigOutput,nextScriptWorkers:o.nextScriptWorkers,runtime:j,largePageDataBytes:o.largePageDataBytes,nextFontManifest:o.nextFontManifest,experimentalClientTraceMetadata:o.experimental.clientTraceMetadata},eD=(0,tj.jsx)(tY.Provider,{value:ej,children:e_.documentElement(ej)}),e$=await (0,eL.getTracer)().trace(eU.vr.renderToString,async()=>rf(eD)),[eN,ek]=e$.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),eI="";e$.startsWith(rh)||(eI+=rh);let eM=(eI+=eN)+e_.contentHTML+ek;return new e5(await r(eM,o),{metadata:g,contentType:k.j9})}let rE=(e,t,r,a,n,i,s)=>rb(e,t,r,a,n,n,i,s),rx=t$().createContext(null);function r_(e){let t=(0,tD.useContext)(rx);t&&t(e)}class rP extends tA{constructor(e){super(e),this.components=e.components}render(e,t,r){return rb(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document},r.sharedContext,r.renderContext)}}let rR={contexts:y},rw=rP})(),module.exports=i})();
+Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(e.revalidate)}' for ${a.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else t=!1;if(h.pageProps=Object.assign({},h.pageProps,"props"in e?e.props:void 0),g.cacheControl={revalidate:t,expire:void 0},g.pageData=h,g.isNotFound)return new e5(null,{metadata:g,contentType:null})}if(R&&(h.__N_SSP=!0),R&&!F){let e,t=!1;try{e=await (0,eL.getTracer)().trace(eU.vr.getServerSideProps,{spanName:`getServerSideProps ${i}`,attributes:{"next.route":i}},async()=>R({req:a,res:n,query:s,resolvedUrl:o.resolvedUrl,...J?{params:C}:void 0,...!1!==d?{draftMode:!0,preview:!0,previewData:d}:void 0,locales:[...o.locales??[]],locale:o.locale,defaultLocale:o.defaultLocale})),g.cacheControl={revalidate:0,expire:void 0}}catch(e){throw"object"==typeof e&&null!==e&&"name"in e&&"message"in e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Object.defineProperty(Error(k.UO),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(e.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(r.length)throw Object.defineProperty(Error(rv("getServerSideProps",r)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in e&&e.notFound){if("/404"===i)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return g.isNotFound=!0,new e5(null,{metadata:g,contentType:null})}if("redirect"in e&&"object"==typeof e.redirect&&(ry(e.redirect,a,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:t2(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),g.isRedirect=!0),t&&(e.props=await e.props),H&&!tH(i,"getServerSideProps",e.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});h.pageProps=Object.assign({},h.pageProps,e.props),g.pageData=h}if(w&&!U||g.isRedirect)return new e5(JSON.stringify(h),{metadata:g,contentType:k.U2});if(F&&(h.pageProps={}),B(n)&&!U)return e5.EMPTY;let eg=b;if(Z&&J){let e,t=(e=eE(eb(i))).startsWith("/index/")&&!A(e)?e.slice(6):"/index"!==e?e:"/";t in eg.pages&&(eg={...eg,pages:{...eg.pages,[t]:[...eg.pages[t],...eg.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:eg.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let ey=({children:e})=>(0,tj.jsx)("div",{id:"__next",children:e}),ex=async()=>{let e,t,r,a;async function i(e){let t=async(t={})=>{if(ep.err&&x)return e&&e(N,M),{html:await rf((0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})})),head:en};let{App:r,Component:a}="function"==typeof t?{App:N,Component:t(M)}:{App:t.enhanceApp?t.enhanceApp(N):N,Component:t.enhanceComponent?t.enhanceComponent(M):M},n=await e(r,a);return await n.allReady,{html:await eG(n),head:en}},r={...ep,renderPage:t},a=await W(I,r);if(B(n)&&!U)return null;if(!a||"string"!=typeof a.html)throw Object.defineProperty(Error(`"${G(I)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps:a,documentCtx:r}}I.__NEXT_BUILTIN_DOCUMENT__;let s=async(e,t)=>{let r,a,n=(r=e||N,a=t||M,ep.err&&x?(0,tj.jsx)(ey,{children:(0,tj.jsx)(x,{})}):(0,tj.jsx)(ey,{children:(0,tj.jsx)(eh,{children:rg(r,a,{...h,router:ee})})}));return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eL.getTracer)().trace(eU.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:tk(),element:n})},o=!!I.getInitialProps;if(o)if(null===(e=await i(s)))t=null;else{let{docProps:r}=e;t=r.html}else{e={};let r=await s(N,M);await r.allReady,t=await eG(r)}let{docProps:l}=e||{};o?(r=l.styles,en=l.head):(r=ea.styles(),ea.flush());let c=await rf((a=ea.styles(),ea.flush(),(0,tj.jsx)(tj.Fragment,{children:a})));return null===t?null:{contentHTML:c+t,documentElement:e=>(0,tj.jsx)(I,{...e,...l}),head:en,headTags:[],styles:r}};(0,eL.getTracer)().setRootSpanAttribute("next.route",o.page);let e_=await (0,eL.getTracer)().trace(eU.vr.renderDocument,{spanName:`render route (pages) ${o.page}`,attributes:{"next.route":o.page}},async()=>ex());if(!e_)return new e5(null,{metadata:g,contentType:k.j9});let eP=new Set,eR=new Set;for(let e of es){let t=E[e];t&&(eP.add(t.id),t.files.forEach(e=>{eR.add(e)}))}let{assetPrefix:ew,defaultLocale:eC,disableOptimizedLoading:eS,domainLocales:eO,locale:eT,locales:eA}=o,ej={__NEXT_DATA__:{props:h,page:i,query:s,buildId:c.buildId,assetPrefix:""===ew?void 0:ew,nextExport:!0===em||void 0,autoExport:!0===Z||void 0,isFallback:F,isExperimentalCompile:D,dynamicIds:0===eP.size?void 0:Array.from(eP),err:o.err?function(e,t){if(e){let e="server";return e=t[ru]||"server",{name:t.name,source:e,message:t9()(t.message),stack:t.stack,digest:t.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!1,o.err):void 0,gsp:!!_||void 0,gssp:!!R||void 0,customServer:c.customServer,gip:!!X||void 0,appGip:!q||void 0,locale:eT,locales:eA,defaultLocale:eC,domainLocales:eO,isPreview:!0===p||void 0,notFoundSrcPage:void 0},nonce:ec,buildManifest:eg,docComponentsRendered:{},dangerousAsPath:ee.asPath,isDevelopment:!1,deploymentId:c.deploymentId,dynamicImports:Array.from(eR),dynamicCssManifest:new Set(o.dynamicCssManifest||[]),assetPrefix:ew,unstable_runtimeJS:y.unstable_runtimeJS,unstable_JsPreload:y.unstable_JsPreload,assetQueryString:m||"",mutableAssetQueryString:f||"",scriptLoader:er,locale:eT,disableOptimizedLoading:eS,head:e_.head,headTags:e_.headTags,styles:e_.styles,crossOrigin:o.crossOrigin,optimizeCss:o.optimizeCss,nextConfigOutput:o.nextConfigOutput,nextScriptWorkers:o.nextScriptWorkers,runtime:j,largePageDataBytes:o.largePageDataBytes,nextFontManifest:o.nextFontManifest,experimentalClientTraceMetadata:o.experimental.clientTraceMetadata},eD=(0,tj.jsx)(tY.Provider,{value:ej,children:e_.documentElement(ej)}),e$=await (0,eL.getTracer)().trace(eU.vr.renderToString,async()=>rf(eD)),[eN,ek]=e$.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),eI="";e$.startsWith(rh)||(eI+=rh);let eM=(eI+=eN)+e_.contentHTML+ek;return new e5(await r(eM,o),{metadata:g,contentType:k.j9})}let rE=(e,t,r,a,n,i,s)=>rb(e,t,r,a,n,n,i,s),rx=t$().createContext(null);function r_(e){let t=(0,tD.useContext)(rx);t&&t(e)}class rP extends tA{constructor(e){super(e),this.components=e.components}render(e,t,r){return rb(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document},r.sharedContext,r.renderContext)}}let rR={contexts:y},rw=rP})(),module.exports=i})();
 //# sourceMappingURL=pages.runtime.prod.js.map
\ No newline at end of file
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/35ab34375312763242821cf326e04f1bb349d77a/next

@timneutkens timneutkens merged commit 9853944 into canary Apr 7, 2026
309 of 313 checks passed
@timneutkens timneutkens deleted the sokra/styled-jsx-race-condition branch April 7, 2026 15:02
wbinnssmith pushed a commit that referenced this pull request Apr 7, 2026
#92459)

### What?

Fix a race condition in the Pages Router SSR path where styled-jsx
styles were dropped from the rendered HTML.

### Why?

`styledJsxInsertedHTML()` reads and flushes the styled-jsx style
registry. Previously it was called concurrently with the page render via
`Promise.all`:

```js
const [rawStyledJsxInsertedHTML, content] = await Promise.all([
  renderToString(styledJsxInsertedHTML()),
  (async () => { /* render the page */ })(),
])
```

Because both ran at the same time, `styledJsxInsertedHTML()` could (and
in practice did) execute and flush the registry **before** the page
render had finished populating it. The result was that dynamic
styled-jsx styles — those with interpolated expressions that compute
their class names at runtime via DJB2 hashing — were silently dropped
from the SSR output, causing a flash of unstyled content on first load.

This is particularly visible in production deployments where all
components use dynamic styled-jsx (numeric `jsx-*` class names), since
those styles only exist in the registry after rendering completes.

### How?

Serialize the two operations: render the page first, then call
`styledJsxInsertedHTML()`. Since the registry is fully populated by the
time it is read, all styles are captured correctly.

A new e2e test (`test/e2e/styled-jsx-dynamic`) exercises this scenario
with multiple nested components that all use dynamic styled-jsx with
interpolated props, covering the exact FOUC pattern seen in production.

<!-- NEXT_JS_LLM_PR -->

Co-authored-by: Tobias Koppers <sokra@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
@18488292860-coder
Copy link
Copy Markdown

What?

Fix a race condition in the Pages Router SSR path where styled-jsx styles were dropped from the rendered HTML.

Why?

styledJsxInsertedHTML() reads and flushes the styled-jsx style registry. Previously it was called concurrently with the page render via Promise.all:

const [rawStyledJsxInsertedHTML, content] = await Promise.all([
  renderToString(styledJsxInsertedHTML()),
  (async () => { /* render the page */ })(),
])

Because both ran at the same time, styledJsxInsertedHTML() could (and in practice did) execute and flush the registry before the page render had finished populating it. The result was that dynamic styled-jsx styles — those with interpolated expressions that compute their class names at runtime via DJB2 hashing — were silently dropped from the SSR output, causing a flash of unstyled content on first load.

This is particularly visible in production deployments where all components use dynamic styled-jsx (numeric jsx-* class names), since those styles only exist in the registry after rendering completes.

How?

Serialize the two operations: render the page first, then call styledJsxInsertedHTML(). Since the registry is fully populated by the time it is read, all styles are captured correctly.

A new e2e test (test/e2e/styled-jsx-dynamic) exercises this scenario with multiple nested components that all use dynamic styled-jsx with interpolated props, covering the exact FOUC pattern seen in production.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

0