Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: set swr delta #61330

Merged
merged 30 commits into from
Feb 19, 2024
Merged

fix: set swr delta #61330

merged 30 commits into from
Feb 19, 2024

Conversation

adrianha
Copy link
Contributor

@adrianha adrianha commented Jan 29, 2024

Closes: #52251
Closes: #51823

Adding a feature

Added stale-while-revalidate delta amount to indicate that the cache could reuse a stale response while it revalidates, reference. It's also already supported by CloudFront.

@adrianha
Copy link
Contributor Author

hi @wyattjoh, could you please help to review this PR? let me know what you think 🙏

@ijjk
Copy link
Member

ijjk commented Feb 3, 2024

Allow CI Workflow Run

  • approve CI run for commit: 4b91b9f

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

Copy link
Member

@shuding shuding left a comment

Choose a reason for hiding this comment

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

LGTM but cc @ijjk for confirmation 🙏

Co-authored-by: JJ Kasper <jj@jjsweb.site>
@adrianha
Copy link
Contributor Author

adrianha commented Feb 5, 2024

got it, updated the swr value for ISR to 1 year, cc @shuding @ijjk

ijjk
ijjk previously approved these changes Feb 5, 2024
@ijjk
Copy link
Member

ijjk commented Feb 5, 2024

Tests Passed

@ijjk
Copy link
Member

ijjk commented Feb 5, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary adrianha/next.js set-swr-delta Change
buildDuration 14.2s 14.2s N/A
buildDurationCached 7.4s 7.9s ⚠️ +456ms
nodeModulesSize 196 MB 197 MB ⚠️ +13.5 kB
nextStartRea..uration (ms) 431ms 425ms N/A
Client Bundles (main, webpack)
vercel/next.js canary adrianha/next.js set-swr-delta Change
1068-HASH.js gzip 30.3 kB 30.3 kB N/A
3f784ff6-HASH.js gzip 53.5 kB 53.5 kB N/A
4944-HASH.js gzip 5.04 kB 5.03 kB N/A
8423.HASH.js gzip 181 B 181 B
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 241 B 242 B N/A
main-HASH.js gzip 32.1 kB 32.1 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB
Overall change 47.1 kB 47.1 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary adrianha/next.js set-swr-delta Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary adrianha/next.js set-swr-delta Change
_app-HASH.js gzip 196 B 196 B
_error-HASH.js gzip 184 B 183 B N/A
amp-HASH.js gzip 503 B 504 B N/A
css-HASH.js gzip 323 B 324 B N/A
dynamic-HASH.js gzip 2.5 kB 2.51 kB N/A
edge-ssr-HASH.js gzip 258 B 259 B N/A
head-HASH.js gzip 353 B 351 B N/A
hooks-HASH.js gzip 370 B 370 B
image-HASH.js gzip 4.21 kB 4.2 kB N/A
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.68 kB 2.67 kB N/A
routerDirect..HASH.js gzip 313 B 314 B N/A
script-HASH.js gzip 386 B 385 B N/A
withRouter-HASH.js gzip 309 B 311 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 931 B 931 B
Client Build Manifests
vercel/next.js canary adrianha/next.js set-swr-delta Change
_buildManifest.js gzip 485 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary adrianha/next.js set-swr-delta Change
index.html gzip 529 B 528 B N/A
link.html gzip 541 B 540 B N/A
withRouter.html gzip 524 B 522 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary adrianha/next.js set-swr-delta Change
edge-ssr.js gzip 2.29 kB 2.29 kB N/A
page.js gzip 2.98 kB 2.98 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary adrianha/next.js set-swr-delta Change
middleware-b..fest.js gzip 623 B 626 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 466 B 464 B N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 990 B 990 B
Next Runtimes
vercel/next.js canary adrianha/next.js set-swr-delta Change
app-page-exp...dev.js gzip 166 kB 166 kB
app-page-exp..prod.js gzip 95.9 kB 95.9 kB
app-page-tur..prod.js gzip 97.6 kB 97.6 kB
app-page-tur..prod.js gzip 92 kB 92 kB
app-page.run...dev.js gzip 136 kB 136 kB
app-page.run..prod.js gzip 90.6 kB 90.6 kB
app-route-ex...dev.js gzip 22 kB 22 kB
app-route-ex..prod.js gzip 14.9 kB 14.9 kB
app-route-tu..prod.js gzip 14.9 kB 14.9 kB
app-route-tu..prod.js gzip 14.6 kB 14.6 kB
app-route.ru...dev.js gzip 21.7 kB 21.7 kB
app-route.ru..prod.js gzip 14.6 kB 14.6 kB
pages-api-tu..prod.js gzip 9.47 kB 9.47 kB
pages-api.ru...dev.js gzip 9.74 kB 9.74 kB
pages-api.ru..prod.js gzip 9.47 kB 9.47 kB
pages-turbo...prod.js gzip 22.1 kB 22.1 kB N/A
pages.runtim...dev.js gzip 22.7 kB 22.8 kB N/A
pages.runtim..prod.js gzip 22.1 kB 22.1 kB N/A
server.runti..prod.js gzip 50.1 kB 50.2 kB N/A
Overall change 810 kB 810 kB
build cache Overall increase ⚠️
vercel/next.js canary adrianha/next.js set-swr-delta Change
0.pack gzip 1.49 MB 1.49 MB N/A
index.pack gzip 104 kB 104 kB ⚠️ +313 B
Overall change 104 kB 104 kB ⚠️ +313 B
Diff details
Diff for pages-turbo...time.prod.js
@@ -19,14 +19,14 @@ Reason: ${n}`)}}function N(e,t,r){if(!T(r))throw new $(e,t,"",`Props must be ret
 
 Keys that need to be moved: ${t.join(", ")}.
 Read more: https://nextjs.org/docs/messages/${r}`};function eK(e,t,r){let{destination:n,permanent:o,statusCode:s,basePath:a}=e,i=[],l=void 0!==s,u=void 0!==o;u&&l?i.push("`permanent` and `statusCode` can not both be provided"):u&&"boolean"!=typeof o?i.push("`permanent` must be `true` or `false`"):l&&!er.has(s)&&i.push(`\`statusCode\` must undefined or one of ${[...er].join(", ")}`);let d=typeof n;"string"!==d&&i.push(`\`destination\` should be string but received ${d}`);let c=typeof a;if("undefined"!==c&&"boolean"!==c&&i.push(`\`basePath\` should be undefined or a false, received ${c}`),i.length>0)throw Error(`Invalid redirect object returned from ${r} for ${t.url}
-`+i.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp")}async function e0(n,s,a,i,l,u){var d,c,p;let h,f,m,g;(0,x.gk)({req:n},"cookies",(c=n.headers,function(){let{cookie:e}=c;if(!e)return{};let{parse:t}=r("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)}));let v={};if(v.assetQueryString=l.dev&&l.assetQueryString||"",l.dev&&!v.assetQueryString){let e=(n.headers["user-agent"]||"").toLowerCase();e.includes("safari")&&!e.includes("chrome")&&(v.assetQueryString=`?ts=${Date.now()}`)}l.deploymentId&&(v.assetQueryString+=`${v.assetQueryString?"&":"?"}dpl=${l.deploymentId}`),i=Object.assign({},i);let{err:b,dev:w=!1,ampPath:S="",pageConfig:R={},buildManifest:T,reactLoadableManifest:E,ErrorDebug:$,getStaticProps:I,getStaticPaths:k,getServerSideProps:M,isDataReq:q,params:D,previewProps:F,basePath:U,images:Z,runtime:K,isExperimentalCompile:ee}=l,{App:er}=u,ea=v.assetQueryString,ei=u.Document,el=l.Component,eu=!!i.__nextFallback,em=i.__nextNotFoundSrcPage;!function(e){for(let t of eL)delete e[t]}(i);let eg=!!I,ev=eg&&l.nextExport,ey=er.getInitialProps===er.origGetInitialProps,ex=!!(null==el?void 0:el.getInitialProps),eb=null==el?void 0:el.unstable_scriptLoader,ew=J(a),eS="/_error"===a&&el.getInitialProps===el.origGetInitialProps;l.nextExport&&ex&&!eS&&t(`Detected getInitialProps on page '${a}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting.
-Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let eP=!ex&&ey&&!eg&&!M;if(eP&&!w&&ee&&(s.setHeader("Cache-Control","number"==typeof!1?"s-maxage=false, stale-while-revalidate":`s-maxage=${j.BR}, stale-while-revalidate`),eP=!1),ex&&eg)throw Error(j.wh+` ${a}`);if(ex&&M)throw Error(j.Wo+` ${a}`);if(M&&eg)throw Error(j.oL+` ${a}`);if(M&&"export"===l.nextConfigOutput)throw Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if(k&&!ew)throw Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${a}'.
-Read more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);if(k&&!eg)throw Error(`getStaticPaths was added without a getStaticProps in ${a}. Without getStaticProps, getStaticPaths does nothing`);if(eg&&ew&&!k)throw Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${a}'.
-Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);let e_=l.resolvedAsPath||n.url;if(w){let{isValidElementType:e}=r("./dist/compiled/react-is/index.js");if(!e(el))throw Error(`The default export is not a React Component in page: "${a}"`);if(!e(er))throw Error('The default export is not a React Component in page: "/_app"');if(!e(ei))throw Error('The default export is not a React Component in page: "/_document"');if((eP||eu)&&(i={...i.amp?{amp:i.amp}:{}},e_=`${a}${n.url.endsWith("/")&&"/"!==a&&!ew?"/":""}`,n.url=a),"/404"===a&&(ex||M))throw Error(`\`pages/404\` ${j.Ei}`);if(C.Er.includes(a)&&(ex||M))throw Error(`\`pages${a}\` ${j.Ei}`)}for(let e of["getStaticProps","getServerSideProps","getStaticPaths"])if(null==el?void 0:el[e])throw Error(`page ${a} ${e} ${j.lk}`);await H.preloadAll(),(eg||M)&&!eu&&F&&(m=!1!==(h=e(n,s,F)));let ej=!!(M||ex||!ey&&!eg||ee),eC=new eZ(a,i,e_,{isFallback:eu},ej,U,l.locale,l.locales,l.defaultLocale,l.domainLocales,m,et(n,"isLocaleDomain")),eR={back(){eC.back()},forward(){eC.forward()},refresh(){eC.reload()},push(e,t){let{scroll:r}=void 0===t?{}:t;eC.push(e,void 0,{scroll:r})},replace(e,t){let{scroll:r}=void 0===t?{}:t;eC.replace(e,void 0,{scroll:r})},prefetch(e){eC.prefetch(e)}},e$={},eO=(0,_.createStyleRegistry)(),ek={ampFirst:!0===R.amp,hasQuery:!!i.amp,hybrid:"hybrid"===R.amp},eM=function(e){let{ampFirst:t=!1,hybrid:r=!1,hasQuery:n=!1}=void 0===e?{}:e;return t||r&&n}(ek),ez=function(e){void 0===e&&(e=!1);let t=[(0,y.jsx)("meta",{charSet:"utf-8"})];return e||t.push((0,y.jsx)("meta",{name:"viewport",content:"width=device-width"})),t}(eM),eB=[],eW={};eb&&(eW.beforeInteractive=[].concat(eb()).filter(e=>"beforeInteractive"===e.props.strategy).map(e=>e.props));let eU=({children:e})=>{var t;return(0,y.jsx)(eH.Provider,{value:eR,children:(0,y.jsx)(eA.Provider,{value:eC.isReady&&eC.query?(t=eC.asPath,new URL(t,"http://n").searchParams):new URLSearchParams,children:(0,y.jsx)(eF,{router:eC,isAutoExport:eP,children:(0,y.jsx)(eI.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={},r=function(e){let{parameterizedRoute:t,groups:r}=function(e){let t=ef(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{let t=W.find(t=>e.startsWith(t)),o=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&o){let{key:e,optional:s,repeat:a}=eD(o[1]);return r[e]={pos:n++,repeat:a,optional:s},"/"+eq(t)+"([^/]+?)"}if(!o)return"/"+eq(e);{let{key:e,repeat:t,optional:s}=eD(o[1]);return r[e]={pos:n++,repeat:t,optional:s},t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:r}}(e.pathname),n=Object.keys(r.groups);for(let r of n)t[r]=e.query[r];return t}(eC),children:(0,y.jsx)(z.Provider,{value:eC,children:(0,y.jsx)(L.Provider,{value:ek,children:(0,y.jsx)(A.Provider,{value:{updateHead:e=>{ez=e},updateScripts:e=>{e$=e},scripts:eW,mountedInstances:new Set},children:(0,y.jsx)(O.Provider,{value:e=>eB.push(e),children:(0,y.jsx)(_.StyleRegistry,{registry:eO,children:(0,y.jsx)(eE.Provider,{value:Z,children:e})})})})})})})})})})},eV=()=>null,e0=({children:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(eV,{}),(0,y.jsx)(eU,{children:(0,y.jsxs)(y.Fragment,{children:[w?(0,y.jsxs)(y.Fragment,{children:[e,(0,y.jsx)(eV,{})]}):e,(0,y.jsx)(eV,{})]})})]}),e1={err:b,req:eP?void 0:n,res:eP?void 0:s,pathname:a,query:i,asPath:e_,locale:l.locale,locales:l.locales,defaultLocale:l.defaultLocale,AppTree:e=>(0,y.jsx)(e0,{children:eX(er,el,{...e,router:eC})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:n}=await e.renderPage({enhanceApp:e=>t=>(0,y.jsx)(e,{...t})}),o=eO.styles({nonce:t.nonce});return eO.flush(),{html:r,head:n,styles:o}}},e4=!eg&&(l.nextExport||w&&(eP||eu)),e3=()=>{let e=eO.styles();return eO.flush(),(0,y.jsx)(y.Fragment,{children:e})};if(f=await Q(er,{AppTree:e1.AppTree,Component:el,router:eC,ctx:e1}),(eg||M)&&m&&(f.__N_PREVIEW=!0),eg&&(f[C.NO]=!0),eg&&!eu){let e,t;try{e=await (0,eo.getTracer)().trace(es.xj.getStaticProps,{spanName:`getStaticProps ${a}`,attributes:{"next.route":a}},()=>I({...ew?{params:i}:void 0,...m?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Error(j.q6);let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Error(j.Eo);if(r.length)throw Error(eY("getStaticProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');v.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(eK(e.redirect,n,"getStaticProps"),ev)throw Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${n.url})
-See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0}if((w||ev)&&!v.isNotFound&&!N(a,"getStaticProps",e.props))throw Error("invariant: getStaticProps did not return valid props. Please report this.");if("revalidate"in e){if(e.revalidate&&"export"===l.nextConfigOutput)throw Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if("number"==typeof e.revalidate){if(Number.isInteger(e.revalidate)){if(e.revalidate<=0)throw Error(`A page's revalidate option can not be less than or equal to zero for ${n.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.
+`+i.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp")}async function e0(n,s,a,i,l,u){var d,c,p;let h,f,m,g;(0,x.gk)({req:n},"cookies",(c=n.headers,function(){let{cookie:e}=c;if(!e)return{};let{parse:t}=r("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)}));let v={};if(v.assetQueryString=l.dev&&l.assetQueryString||"",l.dev&&!v.assetQueryString){let e=(n.headers["user-agent"]||"").toLowerCase();e.includes("safari")&&!e.includes("chrome")&&(v.assetQueryString=`?ts=${Date.now()}`)}l.deploymentId&&(v.assetQueryString+=`${v.assetQueryString?"&":"?"}dpl=${l.deploymentId}`),i=Object.assign({},i);let{err:b,dev:w=!1,ampPath:S="",pageConfig:R={},buildManifest:T,reactLoadableManifest:E,ErrorDebug:$,getStaticProps:I,getStaticPaths:k,getServerSideProps:M,isDataReq:q,params:D,previewProps:F,basePath:U,images:Z,runtime:K,isExperimentalCompile:ee,swrDelta:er}=l,{App:ea}=u,ei=v.assetQueryString,el=u.Document,eu=l.Component,em=!!i.__nextFallback,eg=i.__nextNotFoundSrcPage;!function(e){for(let t of eL)delete e[t]}(i);let ev=!!I,ey=ev&&l.nextExport,ex=ea.getInitialProps===ea.origGetInitialProps,eb=!!(null==eu?void 0:eu.getInitialProps),ew=null==eu?void 0:eu.unstable_scriptLoader,eS=J(a),eP="/_error"===a&&eu.getInitialProps===eu.origGetInitialProps;l.nextExport&&eb&&!eP&&t(`Detected getInitialProps on page '${a}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting.
+Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let e_=!eb&&ex&&!ev&&!M;if(e_&&!w&&ee&&(s.setHeader("Cache-Control",function({revalidate:e,swrDelta:t}){let r=t?`stale-while-revalidate=${t}`:"stale-while-revalidate";return 0===e?"private, no-cache, no-store, max-age=0, must-revalidate":"number"==typeof e?`s-maxage=${e}, ${r}`:`s-maxage=${j.BR}, ${r}`}({revalidate:!1,swrDelta:er})),e_=!1),eb&&ev)throw Error(j.wh+` ${a}`);if(eb&&M)throw Error(j.Wo+` ${a}`);if(M&&ev)throw Error(j.oL+` ${a}`);if(M&&"export"===l.nextConfigOutput)throw Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if(k&&!eS)throw Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${a}'.
+Read more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);if(k&&!ev)throw Error(`getStaticPaths was added without a getStaticProps in ${a}. Without getStaticProps, getStaticPaths does nothing`);if(ev&&eS&&!k)throw Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${a}'.
+Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);let ej=l.resolvedAsPath||n.url;if(w){let{isValidElementType:e}=r("./dist/compiled/react-is/index.js");if(!e(eu))throw Error(`The default export is not a React Component in page: "${a}"`);if(!e(ea))throw Error('The default export is not a React Component in page: "/_app"');if(!e(el))throw Error('The default export is not a React Component in page: "/_document"');if((e_||em)&&(i={...i.amp?{amp:i.amp}:{}},ej=`${a}${n.url.endsWith("/")&&"/"!==a&&!eS?"/":""}`,n.url=a),"/404"===a&&(eb||M))throw Error(`\`pages/404\` ${j.Ei}`);if(C.Er.includes(a)&&(eb||M))throw Error(`\`pages${a}\` ${j.Ei}`)}for(let e of["getStaticProps","getServerSideProps","getStaticPaths"])if(null==eu?void 0:eu[e])throw Error(`page ${a} ${e} ${j.lk}`);await H.preloadAll(),(ev||M)&&!em&&F&&(m=!1!==(h=e(n,s,F)));let eC=!!(M||eb||!ex&&!ev||ee),eR=new eZ(a,i,ej,{isFallback:em},eC,U,l.locale,l.locales,l.defaultLocale,l.domainLocales,m,et(n,"isLocaleDomain")),e$={back(){eR.back()},forward(){eR.forward()},refresh(){eR.reload()},push(e,t){let{scroll:r}=void 0===t?{}:t;eR.push(e,void 0,{scroll:r})},replace(e,t){let{scroll:r}=void 0===t?{}:t;eR.replace(e,void 0,{scroll:r})},prefetch(e){eR.prefetch(e)}},eO={},ek=(0,_.createStyleRegistry)(),eM={ampFirst:!0===R.amp,hasQuery:!!i.amp,hybrid:"hybrid"===R.amp},ez=function(e){let{ampFirst:t=!1,hybrid:r=!1,hasQuery:n=!1}=void 0===e?{}:e;return t||r&&n}(eM),eB=function(e){void 0===e&&(e=!1);let t=[(0,y.jsx)("meta",{charSet:"utf-8"})];return e||t.push((0,y.jsx)("meta",{name:"viewport",content:"width=device-width"})),t}(ez),eW=[],eU={};ew&&(eU.beforeInteractive=[].concat(ew()).filter(e=>"beforeInteractive"===e.props.strategy).map(e=>e.props));let eV=({children:e})=>{var t;return(0,y.jsx)(eH.Provider,{value:e$,children:(0,y.jsx)(eA.Provider,{value:eR.isReady&&eR.query?(t=eR.asPath,new URL(t,"http://n").searchParams):new URLSearchParams,children:(0,y.jsx)(eF,{router:eR,isAutoExport:e_,children:(0,y.jsx)(eI.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={},r=function(e){let{parameterizedRoute:t,groups:r}=function(e){let t=ef(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{let t=W.find(t=>e.startsWith(t)),o=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&o){let{key:e,optional:s,repeat:a}=eD(o[1]);return r[e]={pos:n++,repeat:a,optional:s},"/"+eq(t)+"([^/]+?)"}if(!o)return"/"+eq(e);{let{key:e,repeat:t,optional:s}=eD(o[1]);return r[e]={pos:n++,repeat:t,optional:s},t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:r}}(e.pathname),n=Object.keys(r.groups);for(let r of n)t[r]=e.query[r];return t}(eR),children:(0,y.jsx)(z.Provider,{value:eR,children:(0,y.jsx)(L.Provider,{value:eM,children:(0,y.jsx)(A.Provider,{value:{updateHead:e=>{eB=e},updateScripts:e=>{eO=e},scripts:eU,mountedInstances:new Set},children:(0,y.jsx)(O.Provider,{value:e=>eW.push(e),children:(0,y.jsx)(_.StyleRegistry,{registry:ek,children:(0,y.jsx)(eE.Provider,{value:Z,children:e})})})})})})})})})})},e0=()=>null,e1=({children:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(e0,{}),(0,y.jsx)(eV,{children:(0,y.jsxs)(y.Fragment,{children:[w?(0,y.jsxs)(y.Fragment,{children:[e,(0,y.jsx)(e0,{})]}):e,(0,y.jsx)(e0,{})]})})]}),e4={err:b,req:e_?void 0:n,res:e_?void 0:s,pathname:a,query:i,asPath:ej,locale:l.locale,locales:l.locales,defaultLocale:l.defaultLocale,AppTree:e=>(0,y.jsx)(e1,{children:eX(ea,eu,{...e,router:eR})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:n}=await e.renderPage({enhanceApp:e=>t=>(0,y.jsx)(e,{...t})}),o=ek.styles({nonce:t.nonce});return ek.flush(),{html:r,head:n,styles:o}}},e3=!ev&&(l.nextExport||w&&(e_||em)),e2=()=>{let e=ek.styles();return ek.flush(),(0,y.jsx)(y.Fragment,{children:e})};if(f=await Q(ea,{AppTree:e4.AppTree,Component:eu,router:eR,ctx:e4}),(ev||M)&&m&&(f.__N_PREVIEW=!0),ev&&(f[C.NO]=!0),ev&&!em){let e,t;try{e=await (0,eo.getTracer)().trace(es.xj.getStaticProps,{spanName:`getStaticProps ${a}`,attributes:{"next.route":a}},()=>I({...eS?{params:i}:void 0,...m?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Error(j.q6);let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Error(j.Eo);if(r.length)throw Error(eY("getStaticProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');v.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(eK(e.redirect,n,"getStaticProps"),ey)throw Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${n.url})
+See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0}if((w||ey)&&!v.isNotFound&&!N(a,"getStaticProps",e.props))throw Error("invariant: getStaticProps did not return valid props. Please report this.");if("revalidate"in e){if(e.revalidate&&"export"===l.nextConfigOutput)throw Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if("number"==typeof e.revalidate){if(Number.isInteger(e.revalidate)){if(e.revalidate<=0)throw Error(`A page's revalidate option can not be less than or equal to zero for ${n.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.
 
 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\`.`);e.revalidate>31536e3&&console.warn(`Warning: A page's revalidate option was set to more than a year for ${n.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 Error(`A page's revalidate option must be seconds expressed as a natural number for ${n.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.`)}else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw 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 ${n.url}`)}else t=!1;if(f.pageProps=Object.assign({},f.pageProps,"props"in e?e.props:void 0),v.revalidate=t,v.pageData=f,v.isNotFound)return new eT(null,{metadata:v})}if(M&&(f[C.uY]=!0),M&&!eu){let e;let t=!1;try{e=await (0,eo.getTracer)().trace(es.xj.getServerSideProps,{spanName:`getServerSideProps ${a}`,attributes:{"next.route":a}},async()=>M({req:n,res:s,query:i,resolvedUrl:l.resolvedUrl,...ew?{params:D}:void 0,...!1!==h?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}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 Error(j.Lx);e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${a}`);if(e.unstable_redirect)throw Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${a}`);if(r.length)throw Error(eY("getServerSideProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');return v.isNotFound=!0,new eT(null,{metadata:v})}if("redirect"in e&&"object"==typeof e.redirect&&(eK(e.redirect,n,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0),t&&(e.props=await e.props),(w||ev)&&!N(a,"getServerSideProps",e.props))throw Error("invariant: getServerSideProps did not return valid props. Please report this.");f.pageProps=Object.assign({},f.pageProps,e.props),v.pageData=f}if(q&&!eg||v.isRedirect)return new eT(JSON.stringify(f),{metadata:v});if(eu&&(f.pageProps={}),V(s)&&!eg)return new eT(null,{metadata:v});let e2=T;if(eP&&ew){let e;let t=(e=(function(e){let t=/^\/index(\/|$)/.test(e)&&!J(e)?"/index"+e:"/"===e?"/index":B(e);{let{posix:e}=r("path"),n=e.normalize(t);if(n!==t)throw new X("Requested and resolved page mismatch: "+t+" "+n)}return t})(a).replace(/\\/g,"/")).startsWith("/index/")&&!J(e)?e.slice(6):"/index"!==e?e:"/";t in e2.pages&&(e2={...e2,pages:{...e2.pages,[t]:[...e2.pages[t],...e2.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:e2.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e8=({children:e})=>eM?e:(0,y.jsx)("div",{id:"__next",children:e}),e9=async()=>{let e,t,r;async function n(e){let t=async(t={})=>{if(e1.err&&$){e&&e(er,el);let t=await eQ((0,y.jsx)(e8,{children:(0,y.jsx)($,{error:e1.err})}));return{html:t,head:ez}}if(w&&(f.router||f.Component))throw Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props");let{App:r,Component:n}="function"==typeof t?{App:er,Component:t(el)}:{App:t.enhanceApp?t.enhanceApp(er):er,Component:t.enhanceComponent?t.enhanceComponent(el):el};if(e)return e(r,n).then(async e=>{await e.allReady;let t=await ep(e);return{html:t,head:ez}});let o=await eQ((0,y.jsx)(e8,{children:(0,y.jsx)(e0,{children:eX(r,n,{...f,router:eC})})}));return{html:o,head:ez}},r={...e1,renderPage:t},n=await Q(ei,r);if(V(s)&&!eg)return null;if(!n||"string"!=typeof n.html){let e=`"${G(ei)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;throw Error(e)}return{docProps:n,documentCtx:r}}ei[C.wU];let o=(e,t)=>{let r=e||er,n=t||el;return e1.err&&$?(0,y.jsx)(e8,{children:(0,y.jsx)($,{error:e1.err})}):(0,y.jsx)(e8,{children:(0,y.jsx)(e0,{children:eX(r,n,{...f,router:eC})})})},a=async(e,t)=>{let r=o(e,t);return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eo.getTracer)().trace(es.k0.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:P(),element:r})},i=(0,eo.getTracer)().wrap(es.xj.createBodyResult,(e,t)=>eh(e,{suffix:t,inlinedDataStream:void 0,isStaticGeneration:!0,getServerInsertedHTML:()=>eQ(e3()),serverInsertedHTMLToHead:!1,validateRootLayout:void 0})),l=!!ei.getInitialProps;if(l){if(null===(t=await n(a)))return null;let{docProps:r}=t;e=e=>i(ec(r.html+e))}else{let r=await a(er,el);e=e=>i(r,e),t={}}let{docProps:u}=t||{};return l?(r=u.styles,ez=u.head):(r=eO.styles(),eO.flush()),{bodyResult:e,documentElement:e=>(0,y.jsx)(ei,{...e,...u}),head:ez,headTags:[],styles:r}};null==(d=(0,eo.getTracer)().getRootSpanAttributes())||d.set("next.route",l.page);let e6=await (0,eo.getTracer)().trace(es.xj.renderDocument,{spanName:`render route (pages) ${l.page}`,attributes:{"next.route":l.page}},async()=>e9());if(!e6)return new eT(null,{metadata:v});let e5=new Set,e7=new Set;for(let e of eB){let t=E[e];t&&(e5.add(t.id),t.files.forEach(e=>{e7.add(e)}))}let te=ek.hybrid,{assetPrefix:tt,buildId:tr,customServer:tn,defaultLocale:to,disableOptimizedLoading:ts,domainLocales:ta,locale:ti,locales:tl,runtimeConfig:tu}=l,td={__NEXT_DATA__:{props:f,page:a,query:i,buildId:tr,assetPrefix:""===tt?void 0:tt,runtimeConfig:tu,nextExport:!0===e4||void 0,autoExport:!0===eP||void 0,isFallback:eu,isExperimentalCompile:ee,dynamicIds:0===e5.size?void 0:Array.from(e5),err:l.err?(p=l.err,w?(g="server",g=p[eJ]||"server",{name:p.name,source:g,message:eN()(p.message),stack:p.stack,digest:p.digest}):{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}):void 0,gsp:!!I||void 0,gssp:!!M||void 0,customServer:tn,gip:!!ex||void 0,appGip:!ey||void 0,locale:ti,locales:tl,defaultLocale:to,domainLocales:ta,isPreview:!0===m||void 0,notFoundSrcPage:em&&w?em:void 0},strictNextHead:l.strictNextHead,buildManifest:e2,docComponentsRendered:{},dangerousAsPath:eC.asPath,canonicalBase:!l.ampPath&&et(n,"didStripLocale")?`${l.canonicalBase||""}/${l.locale}`:l.canonicalBase,ampPath:S,inAmpMode:eM,isDevelopment:!!w,hybridAmp:te,dynamicImports:Array.from(e7),assetPrefix:tt,unstable_runtimeJS:R.unstable_runtimeJS,unstable_JsPreload:R.unstable_JsPreload,assetQueryString:ea,scriptLoader:e$,locale:ti,disableOptimizedLoading:ts,head:e6.head,headTags:e6.headTags,styles:e6.styles,crossOrigin:l.crossOrigin,optimizeCss:l.optimizeCss,optimizeFonts:l.optimizeFonts,nextConfigOutput:l.nextConfigOutput,nextScriptWorkers:l.nextScriptWorkers,runtime:K,largePageDataBytes:l.largePageDataBytes,nextFontManifest:l.nextFontManifest},tc=(0,y.jsx)(L.Provider,{value:ek,children:(0,y.jsx)(Y.Provider,{value:td,children:e6.documentElement(td)})}),tp=await (0,eo.getTracer)().trace(es.xj.renderToString,async()=>eQ(tc)),[th,tf]=tp.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),tm="";tp.startsWith(eG)||(tm+=eG),tm+=th,eM&&(tm+="<!-- __NEXT_DATA__ -->");let tg=await ep(ed(ec(tm),await e6.bodyResult(tf))),tv=await o(a,tg,l,{inAmpMode:eM,hybridAmp:te});return new eT(tv,{metadata:v})}let e1=(e,t,r,n,o)=>e0(e,t,r,n,o,o),e4=w().createContext(null);function e3(e){let t=(0,b.useContext)(e4);t&&t(e)}class e2 extends v{constructor(e){super(e),this.components=e.components}render(e,t,r){return e0(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document})}}let e8={contexts:g},e9=e2})(),module.exports=n})();
+Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`)}else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw 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 ${n.url}`)}else t=!1;if(f.pageProps=Object.assign({},f.pageProps,"props"in e?e.props:void 0),v.revalidate=t,v.pageData=f,v.isNotFound)return new eT(null,{metadata:v})}if(M&&(f[C.uY]=!0),M&&!em){let e;let t=!1;try{e=await (0,eo.getTracer)().trace(es.xj.getServerSideProps,{spanName:`getServerSideProps ${a}`,attributes:{"next.route":a}},async()=>M({req:n,res:s,query:i,resolvedUrl:l.resolvedUrl,...eS?{params:D}:void 0,...!1!==h?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}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 Error(j.Lx);e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${a}`);if(e.unstable_redirect)throw Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${a}`);if(r.length)throw Error(eY("getServerSideProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');return v.isNotFound=!0,new eT(null,{metadata:v})}if("redirect"in e&&"object"==typeof e.redirect&&(eK(e.redirect,n,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0),t&&(e.props=await e.props),(w||ey)&&!N(a,"getServerSideProps",e.props))throw Error("invariant: getServerSideProps did not return valid props. Please report this.");f.pageProps=Object.assign({},f.pageProps,e.props),v.pageData=f}if(q&&!ev||v.isRedirect)return new eT(JSON.stringify(f),{metadata:v});if(em&&(f.pageProps={}),V(s)&&!ev)return new eT(null,{metadata:v});let e8=T;if(e_&&eS){let e;let t=(e=(function(e){let t=/^\/index(\/|$)/.test(e)&&!J(e)?"/index"+e:"/"===e?"/index":B(e);{let{posix:e}=r("path"),n=e.normalize(t);if(n!==t)throw new X("Requested and resolved page mismatch: "+t+" "+n)}return t})(a).replace(/\\/g,"/")).startsWith("/index/")&&!J(e)?e.slice(6):"/index"!==e?e:"/";t in e8.pages&&(e8={...e8,pages:{...e8.pages,[t]:[...e8.pages[t],...e8.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:e8.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e9=({children:e})=>ez?e:(0,y.jsx)("div",{id:"__next",children:e}),e6=async()=>{let e,t,r;async function n(e){let t=async(t={})=>{if(e4.err&&$){e&&e(ea,eu);let t=await eQ((0,y.jsx)(e9,{children:(0,y.jsx)($,{error:e4.err})}));return{html:t,head:eB}}if(w&&(f.router||f.Component))throw Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props");let{App:r,Component:n}="function"==typeof t?{App:ea,Component:t(eu)}:{App:t.enhanceApp?t.enhanceApp(ea):ea,Component:t.enhanceComponent?t.enhanceComponent(eu):eu};if(e)return e(r,n).then(async e=>{await e.allReady;let t=await ep(e);return{html:t,head:eB}});let o=await eQ((0,y.jsx)(e9,{children:(0,y.jsx)(e1,{children:eX(r,n,{...f,router:eR})})}));return{html:o,head:eB}},r={...e4,renderPage:t},n=await Q(el,r);if(V(s)&&!ev)return null;if(!n||"string"!=typeof n.html){let e=`"${G(el)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;throw Error(e)}return{docProps:n,documentCtx:r}}el[C.wU];let o=(e,t)=>{let r=e||ea,n=t||eu;return e4.err&&$?(0,y.jsx)(e9,{children:(0,y.jsx)($,{error:e4.err})}):(0,y.jsx)(e9,{children:(0,y.jsx)(e1,{children:eX(r,n,{...f,router:eR})})})},a=async(e,t)=>{let r=o(e,t);return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eo.getTracer)().trace(es.k0.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:P(),element:r})},i=(0,eo.getTracer)().wrap(es.xj.createBodyResult,(e,t)=>eh(e,{suffix:t,inlinedDataStream:void 0,isStaticGeneration:!0,getServerInsertedHTML:()=>eQ(e2()),serverInsertedHTMLToHead:!1,validateRootLayout:void 0})),l=!!el.getInitialProps;if(l){if(null===(t=await n(a)))return null;let{docProps:r}=t;e=e=>i(ec(r.html+e))}else{let r=await a(ea,eu);e=e=>i(r,e),t={}}let{docProps:u}=t||{};return l?(r=u.styles,eB=u.head):(r=ek.styles(),ek.flush()),{bodyResult:e,documentElement:e=>(0,y.jsx)(el,{...e,...u}),head:eB,headTags:[],styles:r}};null==(d=(0,eo.getTracer)().getRootSpanAttributes())||d.set("next.route",l.page);let e5=await (0,eo.getTracer)().trace(es.xj.renderDocument,{spanName:`render route (pages) ${l.page}`,attributes:{"next.route":l.page}},async()=>e6());if(!e5)return new eT(null,{metadata:v});let e7=new Set,te=new Set;for(let e of eW){let t=E[e];t&&(e7.add(t.id),t.files.forEach(e=>{te.add(e)}))}let tt=eM.hybrid,{assetPrefix:tr,buildId:tn,customServer:to,defaultLocale:ts,disableOptimizedLoading:ta,domainLocales:ti,locale:tl,locales:tu,runtimeConfig:td}=l,tc={__NEXT_DATA__:{props:f,page:a,query:i,buildId:tn,assetPrefix:""===tr?void 0:tr,runtimeConfig:td,nextExport:!0===e3||void 0,autoExport:!0===e_||void 0,isFallback:em,isExperimentalCompile:ee,dynamicIds:0===e7.size?void 0:Array.from(e7),err:l.err?(p=l.err,w?(g="server",g=p[eJ]||"server",{name:p.name,source:g,message:eN()(p.message),stack:p.stack,digest:p.digest}):{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}):void 0,gsp:!!I||void 0,gssp:!!M||void 0,customServer:to,gip:!!eb||void 0,appGip:!ex||void 0,locale:tl,locales:tu,defaultLocale:ts,domainLocales:ti,isPreview:!0===m||void 0,notFoundSrcPage:eg&&w?eg:void 0},strictNextHead:l.strictNextHead,buildManifest:e8,docComponentsRendered:{},dangerousAsPath:eR.asPath,canonicalBase:!l.ampPath&&et(n,"didStripLocale")?`${l.canonicalBase||""}/${l.locale}`:l.canonicalBase,ampPath:S,inAmpMode:ez,isDevelopment:!!w,hybridAmp:tt,dynamicImports:Array.from(te),assetPrefix:tr,unstable_runtimeJS:R.unstable_runtimeJS,unstable_JsPreload:R.unstable_JsPreload,assetQueryString:ei,scriptLoader:eO,locale:tl,disableOptimizedLoading:ta,head:e5.head,headTags:e5.headTags,styles:e5.styles,crossOrigin:l.crossOrigin,optimizeCss:l.optimizeCss,optimizeFonts:l.optimizeFonts,nextConfigOutput:l.nextConfigOutput,nextScriptWorkers:l.nextScriptWorkers,runtime:K,largePageDataBytes:l.largePageDataBytes,nextFontManifest:l.nextFontManifest},tp=(0,y.jsx)(L.Provider,{value:eM,children:(0,y.jsx)(Y.Provider,{value:tc,children:e5.documentElement(tc)})}),th=await (0,eo.getTracer)().trace(es.xj.renderToString,async()=>eQ(tp)),[tf,tm]=th.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),tg="";th.startsWith(eG)||(tg+=eG),tg+=tf,ez&&(tg+="<!-- __NEXT_DATA__ -->");let tv=await ep(ed(ec(tg),await e5.bodyResult(tm))),ty=await o(a,tv,l,{inAmpMode:ez,hybridAmp:tt});return new eT(ty,{metadata:v})}let e1=(e,t,r,n,o)=>e0(e,t,r,n,o,o),e4=w().createContext(null);function e3(e){let t=(0,b.useContext)(e4);t&&t(e)}class e2 extends v{constructor(e){super(e),this.components=e.components}render(e,t,r){return e0(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document})}}let e8={contexts:g},e9=e2})(),module.exports=n})();
 //# sourceMappingURL=pages-turbo.runtime.prod.js.map
\ No newline at end of file
Diff for pages.runtime.dev.js
@@ -11,19 +11,19 @@ Reason: ${n}`)}}function N(e,t,r){if(!T(r))throw new $(e,t,"",`Props must be ret
 
 Keys that need to be moved: ${t.join(", ")}.
 Read more: https://nextjs.org/docs/messages/${r}`};function e0(e,t,r){let{destination:n,permanent:o,statusCode:s,basePath:a}=e,i=[],l=void 0!==s,d=void 0!==o;d&&l?i.push("`permanent` and `statusCode` can not both be provided"):d&&"boolean"!=typeof o?i.push("`permanent` must be `true` or `false`"):l&&!er.has(s)&&i.push(`\`statusCode\` must undefined or one of ${[...er].join(", ")}`);let u=typeof n;"string"!==u&&i.push(`\`destination\` should be string but received ${u}`);let c=typeof a;if("undefined"!==c&&"boolean"!==c&&i.push(`\`basePath\` should be undefined or a false, received ${c}`),i.length>0)throw Error(`Invalid redirect object returned from ${r} for ${t.url}
-`+i.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp")}async function e1(n,s,a,i,l,d){var u,c,p;let h,m,f,g;(0,x.gk)({req:n},"cookies",(c=n.headers,function(){let{cookie:e}=c;if(!e)return{};let{parse:t}=r("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)}));let v={};if(v.assetQueryString=l.dev&&l.assetQueryString||"",l.dev&&!v.assetQueryString){let e=(n.headers["user-agent"]||"").toLowerCase();e.includes("safari")&&!e.includes("chrome")&&(v.assetQueryString=`?ts=${Date.now()}`)}l.deploymentId&&(v.assetQueryString+=`${v.assetQueryString?"&":"?"}dpl=${l.deploymentId}`),i=Object.assign({},i);let{err:b,dev:w=!1,ampPath:S="",pageConfig:R={},buildManifest:T,reactLoadableManifest:E,ErrorDebug:$,getStaticProps:I,getStaticPaths:k,getServerSideProps:M,isDataReq:q,params:D,previewProps:F,basePath:U,images:Z,runtime:K,isExperimentalCompile:ee}=l,{App:er}=d,ea=v.assetQueryString,ei=d.Document,el=l.Component,ed=!!i.__nextFallback,ef=i.__nextNotFoundSrcPage;!function(e){for(let t of eL)delete e[t]}(i);let eg=!!I,ev=eg&&l.nextExport,ey=er.getInitialProps===er.origGetInitialProps,ex=!!(null==el?void 0:el.getInitialProps),eb=null==el?void 0:el.unstable_scriptLoader,ew=J(a),eS="/_error"===a&&el.getInitialProps===el.origGetInitialProps;l.nextExport&&ex&&!eS&&t(`Detected getInitialProps on page '${a}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting.
-Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let eP=!ex&&ey&&!eg&&!M;if(eP&&!w&&ee&&(s.setHeader("Cache-Control","number"==typeof!1?"s-maxage=false, stale-while-revalidate":`s-maxage=${j.BR}, stale-while-revalidate`),eP=!1),ex&&eg)throw Error(j.wh+` ${a}`);if(ex&&M)throw Error(j.Wo+` ${a}`);if(M&&eg)throw Error(j.oL+` ${a}`);if(M&&"export"===l.nextConfigOutput)throw Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if(k&&!ew)throw Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${a}'.
-Read more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);if(k&&!eg)throw Error(`getStaticPaths was added without a getStaticProps in ${a}. Without getStaticProps, getStaticPaths does nothing`);if(eg&&ew&&!k)throw Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${a}'.
-Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);let e_=l.resolvedAsPath||n.url;if(w){let{isValidElementType:e}=r("./dist/compiled/react-is/index.js");if(!e(el))throw Error(`The default export is not a React Component in page: "${a}"`);if(!e(er))throw Error('The default export is not a React Component in page: "/_app"');if(!e(ei))throw Error('The default export is not a React Component in page: "/_document"');if((eP||ed)&&(i={...i.amp?{amp:i.amp}:{}},e_=`${a}${n.url.endsWith("/")&&"/"!==a&&!ew?"/":""}`,n.url=a),"/404"===a&&(ex||M))throw Error(`\`pages/404\` ${j.Ei}`);if(C.Er.includes(a)&&(ex||M))throw Error(`\`pages${a}\` ${j.Ei}`)}for(let e of["getStaticProps","getServerSideProps","getStaticPaths"])if(null==el?void 0:el[e])throw Error(`page ${a} ${e} ${j.lk}`);await H.preloadAll(),(eg||M)&&!ed&&F&&(f=!1!==(h=e(n,s,F)));let ej=!!(M||ex||!ey&&!eg||ee),eC=new eY(a,i,e_,{isFallback:ed},ej,U,l.locale,l.locales,l.defaultLocale,l.domainLocales,f,et(n,"isLocaleDomain")),eR={back(){eC.back()},forward(){eC.forward()},refresh(){eC.reload()},push(e,t){let{scroll:r}=void 0===t?{}:t;eC.push(e,void 0,{scroll:r})},replace(e,t){let{scroll:r}=void 0===t?{}:t;eC.replace(e,void 0,{scroll:r})},prefetch(e){eC.prefetch(e)}},e$={},eO=(0,_.createStyleRegistry)(),ek={ampFirst:!0===R.amp,hasQuery:!!i.amp,hybrid:"hybrid"===R.amp},eM=function(e){let{ampFirst:t=!1,hybrid:r=!1,hasQuery:n=!1}=void 0===e?{}:e;return t||r&&n}(ek),ez=function(e){void 0===e&&(e=!1);let t=[(0,y.jsx)("meta",{charSet:"utf-8"})];return e||t.push((0,y.jsx)("meta",{name:"viewport",content:"width=device-width"})),t}(eM),eB=[],eW={};eb&&(eW.beforeInteractive=[].concat(eb()).filter(e=>"beforeInteractive"===e.props.strategy).map(e=>e.props));let eU=({children:e})=>{var t;return(0,y.jsx)(eH.Provider,{value:eR,children:(0,y.jsx)(eA.Provider,{value:eC.isReady&&eC.query?(t=eC.asPath,new URL(t,"http://n").searchParams):new URLSearchParams,children:(0,y.jsx)(eF,{router:eC,isAutoExport:eP,children:(0,y.jsx)(eI.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={},r=function(e){let{parameterizedRoute:t,groups:r}=function(e){let t=em(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{let t=W.find(t=>e.startsWith(t)),o=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&o){let{key:e,optional:s,repeat:a}=eD(o[1]);return r[e]={pos:n++,repeat:a,optional:s},"/"+eq(t)+"([^/]+?)"}if(!o)return"/"+eq(e);{let{key:e,repeat:t,optional:s}=eD(o[1]);return r[e]={pos:n++,repeat:t,optional:s},t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:r}}(e.pathname),n=Object.keys(r.groups);for(let r of n)t[r]=e.query[r];return t}(eC),children:(0,y.jsx)(z.Provider,{value:eC,children:(0,y.jsx)(L.Provider,{value:ek,children:(0,y.jsx)(A.Provider,{value:{updateHead:e=>{ez=e},updateScripts:e=>{e$=e},scripts:eW,mountedInstances:new Set},children:(0,y.jsx)(O.Provider,{value:e=>eB.push(e),children:(0,y.jsx)(_.StyleRegistry,{registry:eO,children:(0,y.jsx)(eE.Provider,{value:Z,children:e})})})})})})})})})})},eQ=()=>null,e1=({children:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(eQ,{}),(0,y.jsx)(eU,{children:(0,y.jsxs)(y.Fragment,{children:[w?(0,y.jsxs)(y.Fragment,{children:[e,(0,y.jsx)(eQ,{})]}):e,(0,y.jsx)(eQ,{})]})})]}),e4={err:b,req:eP?void 0:n,res:eP?void 0:s,pathname:a,query:i,asPath:e_,locale:l.locale,locales:l.locales,defaultLocale:l.defaultLocale,AppTree:e=>(0,y.jsx)(e1,{children:eX(er,el,{...e,router:eC})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:n}=await e.renderPage({enhanceApp:e=>t=>(0,y.jsx)(e,{...t})}),o=eO.styles({nonce:t.nonce});return eO.flush(),{html:r,head:n,styles:o}}},e3=!eg&&(l.nextExport||w&&(eP||ed)),e2=()=>{let e=eO.styles();return eO.flush(),(0,y.jsx)(y.Fragment,{children:e})};if(m=await Q(er,{AppTree:e4.AppTree,Component:el,router:eC,ctx:e4}),(eg||M)&&f&&(m.__N_PREVIEW=!0),eg&&(m[C.NO]=!0),eg&&!ed){let e,t;try{e=await (0,eo.getTracer)().trace(es.xj.getStaticProps,{spanName:`getStaticProps ${a}`,attributes:{"next.route":a}},()=>I({...ew?{params:i}:void 0,...f?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Error(j.q6);let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Error(j.Eo);if(r.length)throw Error(eK("getStaticProps",r));if(void 0!==e.notFound&&void 0!==e.redirect)throw Error(`\`redirect\` and \`notFound\` can not both be returned from ${eg?"getStaticProps":"getServerSideProps"} at the same time. Page: ${a}
-See more info here: https://nextjs.org/docs/messages/gssp-mixed-not-found-redirect`);if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');v.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(e0(e.redirect,n,"getStaticProps"),ev)throw Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${n.url})
-See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0}if((w||ev)&&!v.isNotFound&&!N(a,"getStaticProps",e.props))throw Error("invariant: getStaticProps did not return valid props. Please report this.");if("revalidate"in e){if(e.revalidate&&"export"===l.nextConfigOutput)throw Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if("number"==typeof e.revalidate){if(Number.isInteger(e.revalidate)){if(e.revalidate<=0)throw Error(`A page's revalidate option can not be less than or equal to zero for ${n.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.
+`+i.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp")}async function e1(n,s,a,i,l,d){var u,c,p;let h,m,f,g;(0,x.gk)({req:n},"cookies",(c=n.headers,function(){let{cookie:e}=c;if(!e)return{};let{parse:t}=r("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)}));let v={};if(v.assetQueryString=l.dev&&l.assetQueryString||"",l.dev&&!v.assetQueryString){let e=(n.headers["user-agent"]||"").toLowerCase();e.includes("safari")&&!e.includes("chrome")&&(v.assetQueryString=`?ts=${Date.now()}`)}l.deploymentId&&(v.assetQueryString+=`${v.assetQueryString?"&":"?"}dpl=${l.deploymentId}`),i=Object.assign({},i);let{err:b,dev:w=!1,ampPath:S="",pageConfig:R={},buildManifest:T,reactLoadableManifest:E,ErrorDebug:$,getStaticProps:I,getStaticPaths:k,getServerSideProps:M,isDataReq:q,params:D,previewProps:F,basePath:U,images:Z,runtime:K,isExperimentalCompile:ee,swrDelta:er}=l,{App:ea}=d,ei=v.assetQueryString,el=d.Document,ed=l.Component,ef=!!i.__nextFallback,eg=i.__nextNotFoundSrcPage;!function(e){for(let t of eL)delete e[t]}(i);let ev=!!I,ey=ev&&l.nextExport,ex=ea.getInitialProps===ea.origGetInitialProps,eb=!!(null==ed?void 0:ed.getInitialProps),ew=null==ed?void 0:ed.unstable_scriptLoader,eS=J(a),eP="/_error"===a&&ed.getInitialProps===ed.origGetInitialProps;l.nextExport&&eb&&!eP&&t(`Detected getInitialProps on page '${a}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting.
+Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let e_=!eb&&ex&&!ev&&!M;if(e_&&!w&&ee&&(s.setHeader("Cache-Control",function({revalidate:e,swrDelta:t}){let r=t?`stale-while-revalidate=${t}`:"stale-while-revalidate";return 0===e?"private, no-cache, no-store, max-age=0, must-revalidate":"number"==typeof e?`s-maxage=${e}, ${r}`:`s-maxage=${j.BR}, ${r}`}({revalidate:!1,swrDelta:er})),e_=!1),eb&&ev)throw Error(j.wh+` ${a}`);if(eb&&M)throw Error(j.Wo+` ${a}`);if(M&&ev)throw Error(j.oL+` ${a}`);if(M&&"export"===l.nextConfigOutput)throw Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if(k&&!eS)throw Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${a}'.
+Read more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);if(k&&!ev)throw Error(`getStaticPaths was added without a getStaticProps in ${a}. Without getStaticProps, getStaticPaths does nothing`);if(ev&&eS&&!k)throw Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${a}'.
+Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);let ej=l.resolvedAsPath||n.url;if(w){let{isValidElementType:e}=r("./dist/compiled/react-is/index.js");if(!e(ed))throw Error(`The default export is not a React Component in page: "${a}"`);if(!e(ea))throw Error('The default export is not a React Component in page: "/_app"');if(!e(el))throw Error('The default export is not a React Component in page: "/_document"');if((e_||ef)&&(i={...i.amp?{amp:i.amp}:{}},ej=`${a}${n.url.endsWith("/")&&"/"!==a&&!eS?"/":""}`,n.url=a),"/404"===a&&(eb||M))throw Error(`\`pages/404\` ${j.Ei}`);if(C.Er.includes(a)&&(eb||M))throw Error(`\`pages${a}\` ${j.Ei}`)}for(let e of["getStaticProps","getServerSideProps","getStaticPaths"])if(null==ed?void 0:ed[e])throw Error(`page ${a} ${e} ${j.lk}`);await H.preloadAll(),(ev||M)&&!ef&&F&&(f=!1!==(h=e(n,s,F)));let eC=!!(M||eb||!ex&&!ev||ee),eR=new eY(a,i,ej,{isFallback:ef},eC,U,l.locale,l.locales,l.defaultLocale,l.domainLocales,f,et(n,"isLocaleDomain")),e$={back(){eR.back()},forward(){eR.forward()},refresh(){eR.reload()},push(e,t){let{scroll:r}=void 0===t?{}:t;eR.push(e,void 0,{scroll:r})},replace(e,t){let{scroll:r}=void 0===t?{}:t;eR.replace(e,void 0,{scroll:r})},prefetch(e){eR.prefetch(e)}},eO={},ek=(0,_.createStyleRegistry)(),eM={ampFirst:!0===R.amp,hasQuery:!!i.amp,hybrid:"hybrid"===R.amp},ez=function(e){let{ampFirst:t=!1,hybrid:r=!1,hasQuery:n=!1}=void 0===e?{}:e;return t||r&&n}(eM),eB=function(e){void 0===e&&(e=!1);let t=[(0,y.jsx)("meta",{charSet:"utf-8"})];return e||t.push((0,y.jsx)("meta",{name:"viewport",content:"width=device-width"})),t}(ez),eW=[],eU={};ew&&(eU.beforeInteractive=[].concat(ew()).filter(e=>"beforeInteractive"===e.props.strategy).map(e=>e.props));let eQ=({children:e})=>{var t;return(0,y.jsx)(eH.Provider,{value:e$,children:(0,y.jsx)(eA.Provider,{value:eR.isReady&&eR.query?(t=eR.asPath,new URL(t,"http://n").searchParams):new URLSearchParams,children:(0,y.jsx)(eF,{router:eR,isAutoExport:e_,children:(0,y.jsx)(eI.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={},r=function(e){let{parameterizedRoute:t,groups:r}=function(e){let t=em(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{let t=W.find(t=>e.startsWith(t)),o=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&o){let{key:e,optional:s,repeat:a}=eD(o[1]);return r[e]={pos:n++,repeat:a,optional:s},"/"+eq(t)+"([^/]+?)"}if(!o)return"/"+eq(e);{let{key:e,repeat:t,optional:s}=eD(o[1]);return r[e]={pos:n++,repeat:t,optional:s},t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:r}}(e.pathname),n=Object.keys(r.groups);for(let r of n)t[r]=e.query[r];return t}(eR),children:(0,y.jsx)(z.Provider,{value:eR,children:(0,y.jsx)(L.Provider,{value:eM,children:(0,y.jsx)(A.Provider,{value:{updateHead:e=>{eB=e},updateScripts:e=>{eO=e},scripts:eU,mountedInstances:new Set},children:(0,y.jsx)(O.Provider,{value:e=>eW.push(e),children:(0,y.jsx)(_.StyleRegistry,{registry:ek,children:(0,y.jsx)(eE.Provider,{value:Z,children:e})})})})})})})})})})},e1=()=>null,e4=({children:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(e1,{}),(0,y.jsx)(eQ,{children:(0,y.jsxs)(y.Fragment,{children:[w?(0,y.jsxs)(y.Fragment,{children:[e,(0,y.jsx)(e1,{})]}):e,(0,y.jsx)(e1,{})]})})]}),e3={err:b,req:e_?void 0:n,res:e_?void 0:s,pathname:a,query:i,asPath:ej,locale:l.locale,locales:l.locales,defaultLocale:l.defaultLocale,AppTree:e=>(0,y.jsx)(e4,{children:eX(ea,ed,{...e,router:eR})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:n}=await e.renderPage({enhanceApp:e=>t=>(0,y.jsx)(e,{...t})}),o=ek.styles({nonce:t.nonce});return ek.flush(),{html:r,head:n,styles:o}}},e2=!ev&&(l.nextExport||w&&(e_||ef)),e8=()=>{let e=ek.styles();return ek.flush(),(0,y.jsx)(y.Fragment,{children:e})};if(m=await Q(ea,{AppTree:e3.AppTree,Component:ed,router:eR,ctx:e3}),(ev||M)&&f&&(m.__N_PREVIEW=!0),ev&&(m[C.NO]=!0),ev&&!ef){let e,t;try{e=await (0,eo.getTracer)().trace(es.xj.getStaticProps,{spanName:`getStaticProps ${a}`,attributes:{"next.route":a}},()=>I({...eS?{params:i}:void 0,...f?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Error(j.q6);let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Error(j.Eo);if(r.length)throw Error(eK("getStaticProps",r));if(void 0!==e.notFound&&void 0!==e.redirect)throw Error(`\`redirect\` and \`notFound\` can not both be returned from ${ev?"getStaticProps":"getServerSideProps"} at the same time. Page: ${a}
+See more info here: https://nextjs.org/docs/messages/gssp-mixed-not-found-redirect`);if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');v.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(e0(e.redirect,n,"getStaticProps"),ey)throw Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${n.url})
+See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0}if((w||ey)&&!v.isNotFound&&!N(a,"getStaticProps",e.props))throw Error("invariant: getStaticProps did not return valid props. Please report this.");if("revalidate"in e){if(e.revalidate&&"export"===l.nextConfigOutput)throw Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if("number"==typeof e.revalidate){if(Number.isInteger(e.revalidate)){if(e.revalidate<=0)throw Error(`A page's revalidate option can not be less than or equal to zero for ${n.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.
 
 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\`.`);e.revalidate>31536e3&&console.warn(`Warning: A page's revalidate option was set to more than a year for ${n.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 Error(`A page's revalidate option must be seconds expressed as a natural number for ${n.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.`)}else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw 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 ${n.url}`)}else t=!1;if(m.pageProps=Object.assign({},m.pageProps,"props"in e?e.props:void 0),v.revalidate=t,v.pageData=m,v.isNotFound)return new eT(null,{metadata:v})}if(M&&(m[C.uY]=!0),M&&!ed){let e;let r=!0,o=s,d=!1;o=new Proxy(s,{get:function(e,n){if(!r){let e=`You should not access 'res' after getServerSideProps resolves.
-Read more: https://nextjs.org/docs/messages/gssp-no-mutating-res`;if(d)throw Error(e);t(e)}return eJ.g.get(e,n,s)}});try{e=await (0,eo.getTracer)().trace(es.xj.getServerSideProps,{spanName:`getServerSideProps ${a}`,attributes:{"next.route":a}},async()=>M({req:n,res:o,query:i,resolvedUrl:l.resolvedUrl,...ew?{params:D}:void 0,...!1!==h?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale})),r=!1}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 Error(j.Lx);e.props instanceof Promise&&(d=!0);let u=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${a}`);if(e.unstable_redirect)throw Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${a}`);if(u.length)throw Error(eK("getServerSideProps",u));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');return v.isNotFound=!0,new eT(null,{metadata:v})}if("redirect"in e&&"object"==typeof e.redirect&&(e0(e.redirect,n,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0),d&&(e.props=await e.props),(w||ev)&&!N(a,"getServerSideProps",e.props))throw Error("invariant: getServerSideProps did not return valid props. Please report this.");m.pageProps=Object.assign({},m.pageProps,e.props),v.pageData=m}if(!eg&&!M&&Object.keys((null==m?void 0:m.pageProps)||{}).includes("url")&&console.warn(`The prop \`url\` is a reserved prop in Next.js for legacy reasons and will be overridden on page ${a}
-See more info here: https://nextjs.org/docs/messages/reserved-page-prop`),q&&!eg||v.isRedirect)return new eT(JSON.stringify(m),{metadata:v});if(ed&&(m.pageProps={}),V(s)&&!eg)return new eT(null,{metadata:v});let e8=T;if(eP&&ew){let e;let t=(e=(function(e){let t=/^\/index(\/|$)/.test(e)&&!J(e)?"/index"+e:"/"===e?"/index":B(e);{let{posix:e}=r("path"),n=e.normalize(t);if(n!==t)throw new Y("Requested and resolved page mismatch: "+t+" "+n)}return t})(a).replace(/\\/g,"/")).startsWith("/index/")&&!J(e)?e.slice(6):"/index"!==e?e:"/";t in e8.pages&&(e8={...e8,pages:{...e8.pages,[t]:[...e8.pages[t],...e8.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:e8.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e9=({children:e})=>eM?e:(0,y.jsx)("div",{id:"__next",children:e}),e6=async()=>{let e,t,r;async function n(e){let t=async(t={})=>{if(e4.err&&$){e&&e(er,el);let t=await eZ((0,y.jsx)(e9,{children:(0,y.jsx)($,{error:e4.err})}));return{html:t,head:ez}}if(w&&(m.router||m.Component))throw Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props");let{App:r,Component:n}="function"==typeof t?{App:er,Component:t(el)}:{App:t.enhanceApp?t.enhanceApp(er):er,Component:t.enhanceComponent?t.enhanceComponent(el):el};if(e)return e(r,n).then(async e=>{await e.allReady;let t=await ep(e);return{html:t,head:ez}});let o=await eZ((0,y.jsx)(e9,{children:(0,y.jsx)(e1,{children:eX(r,n,{...m,router:eC})})}));return{html:o,head:ez}},r={...e4,renderPage:t},n=await Q(ei,r);if(V(s)&&!eg)return null;if(!n||"string"!=typeof n.html){let e=`"${G(ei)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;throw Error(e)}return{docProps:n,documentCtx:r}}ei[C.wU];let o=(e,t)=>{let r=e||er,n=t||el;return e4.err&&$?(0,y.jsx)(e9,{children:(0,y.jsx)($,{error:e4.err})}):(0,y.jsx)(e9,{children:(0,y.jsx)(e1,{children:eX(r,n,{...m,router:eC})})})},a=async(e,t)=>{let r=o(e,t);return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eo.getTracer)().trace(es.k0.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:P(),element:r})},i=(0,eo.getTracer)().wrap(es.xj.createBodyResult,(e,t)=>eh(e,{suffix:t,inlinedDataStream:void 0,isStaticGeneration:!0,getServerInsertedHTML:()=>eZ(e2()),serverInsertedHTMLToHead:!1,validateRootLayout:void 0})),l=!!ei.getInitialProps;if(l){if(null===(t=await n(a)))return null;let{docProps:r}=t;e=e=>i(ec(r.html+e))}else{let r=await a(er,el);e=e=>i(r,e),t={}}let{docProps:d}=t||{};return l?(r=d.styles,ez=d.head):(r=eO.styles(),eO.flush()),{bodyResult:e,documentElement:e=>(0,y.jsx)(ei,{...e,...d}),head:ez,headTags:[],styles:r}};null==(u=(0,eo.getTracer)().getRootSpanAttributes())||u.set("next.route",l.page);let e5=await (0,eo.getTracer)().trace(es.xj.renderDocument,{spanName:`render route (pages) ${l.page}`,attributes:{"next.route":l.page}},async()=>e6());if(!e5)return new eT(null,{metadata:v});let e7=new Set,te=new Set;for(let e of eB){let t=E[e];t&&(e7.add(t.id),t.files.forEach(e=>{te.add(e)}))}let tt=ek.hybrid,tr={},{assetPrefix:tn,buildId:to,customServer:ts,defaultLocale:ta,disableOptimizedLoading:ti,domainLocales:tl,locale:td,locales:tu,runtimeConfig:tc}=l,tp={__NEXT_DATA__:{props:m,page:a,query:i,buildId:to,assetPrefix:""===tn?void 0:tn,runtimeConfig:tc,nextExport:!0===e3||void 0,autoExport:!0===eP||void 0,isFallback:ed,isExperimentalCompile:ee,dynamicIds:0===e7.size?void 0:Array.from(e7),err:l.err?(p=l.err,w?(g="server",g=p[eG]||"server",{name:p.name,source:g,message:eN()(p.message),stack:p.stack,digest:p.digest}):{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}):void 0,gsp:!!I||void 0,gssp:!!M||void 0,customServer:ts,gip:!!ex||void 0,appGip:!ey||void 0,locale:td,locales:tu,defaultLocale:ta,domainLocales:tl,isPreview:!0===f||void 0,notFoundSrcPage:ef&&w?ef:void 0},strictNextHead:l.strictNextHead,buildManifest:e8,docComponentsRendered:tr,dangerousAsPath:eC.asPath,canonicalBase:!l.ampPath&&et(n,"didStripLocale")?`${l.canonicalBase||""}/${l.locale}`:l.canonicalBase,ampPath:S,inAmpMode:eM,isDevelopment:!!w,hybridAmp:tt,dynamicImports:Array.from(te),assetPrefix:tn,unstable_runtimeJS:void 0,unstable_JsPreload:R.unstable_JsPreload,assetQueryString:ea,scriptLoader:e$,locale:td,disableOptimizedLoading:ti,head:e5.head,headTags:e5.headTags,styles:e5.styles,crossOrigin:l.crossOrigin,optimizeCss:l.optimizeCss,optimizeFonts:l.optimizeFonts,nextConfigOutput:l.nextConfigOutput,nextScriptWorkers:l.nextScriptWorkers,runtime:K,largePageDataBytes:l.largePageDataBytes,nextFontManifest:l.nextFontManifest},th=(0,y.jsx)(L.Provider,{value:ek,children:(0,y.jsx)(X.Provider,{value:tp,children:e5.documentElement(tp)})}),tm=await (0,eo.getTracer)().trace(es.xj.renderToString,async()=>eZ(th));{let e=[];for(let t of["Main","Head","NextScript","Html"])tr[t]||e.push(t);if(e.length){let t=e.map(e=>`<${e} />`).join(", "),r=1!==e.length?"s":"";console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${r}.
+Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`)}else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw 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 ${n.url}`)}else t=!1;if(m.pageProps=Object.assign({},m.pageProps,"props"in e?e.props:void 0),v.revalidate=t,v.pageData=m,v.isNotFound)return new eT(null,{metadata:v})}if(M&&(m[C.uY]=!0),M&&!ef){let e;let r=!0,o=s,d=!1;o=new Proxy(s,{get:function(e,n){if(!r){let e=`You should not access 'res' after getServerSideProps resolves.
+Read more: https://nextjs.org/docs/messages/gssp-no-mutating-res`;if(d)throw Error(e);t(e)}return eJ.g.get(e,n,s)}});try{e=await (0,eo.getTracer)().trace(es.xj.getServerSideProps,{spanName:`getServerSideProps ${a}`,attributes:{"next.route":a}},async()=>M({req:n,res:o,query:i,resolvedUrl:l.resolvedUrl,...eS?{params:D}:void 0,...!1!==h?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale})),r=!1}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 Error(j.Lx);e.props instanceof Promise&&(d=!0);let u=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${a}`);if(e.unstable_redirect)throw Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${a}`);if(u.length)throw Error(eK("getServerSideProps",u));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');return v.isNotFound=!0,new eT(null,{metadata:v})}if("redirect"in e&&"object"==typeof e.redirect&&(e0(e.redirect,n,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0),d&&(e.props=await e.props),(w||ey)&&!N(a,"getServerSideProps",e.props))throw Error("invariant: getServerSideProps did not return valid props. Please report this.");m.pageProps=Object.assign({},m.pageProps,e.props),v.pageData=m}if(!ev&&!M&&Object.keys((null==m?void 0:m.pageProps)||{}).includes("url")&&console.warn(`The prop \`url\` is a reserved prop in Next.js for legacy reasons and will be overridden on page ${a}
+See more info here: https://nextjs.org/docs/messages/reserved-page-prop`),q&&!ev||v.isRedirect)return new eT(JSON.stringify(m),{metadata:v});if(ef&&(m.pageProps={}),V(s)&&!ev)return new eT(null,{metadata:v});let e9=T;if(e_&&eS){let e;let t=(e=(function(e){let t=/^\/index(\/|$)/.test(e)&&!J(e)?"/index"+e:"/"===e?"/index":B(e);{let{posix:e}=r("path"),n=e.normalize(t);if(n!==t)throw new Y("Requested and resolved page mismatch: "+t+" "+n)}return t})(a).replace(/\\/g,"/")).startsWith("/index/")&&!J(e)?e.slice(6):"/index"!==e?e:"/";t in e9.pages&&(e9={...e9,pages:{...e9.pages,[t]:[...e9.pages[t],...e9.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:e9.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e6=({children:e})=>ez?e:(0,y.jsx)("div",{id:"__next",children:e}),e5=async()=>{let e,t,r;async function n(e){let t=async(t={})=>{if(e3.err&&$){e&&e(ea,ed);let t=await eZ((0,y.jsx)(e6,{children:(0,y.jsx)($,{error:e3.err})}));return{html:t,head:eB}}if(w&&(m.router||m.Component))throw Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props");let{App:r,Component:n}="function"==typeof t?{App:ea,Component:t(ed)}:{App:t.enhanceApp?t.enhanceApp(ea):ea,Component:t.enhanceComponent?t.enhanceComponent(ed):ed};if(e)return e(r,n).then(async e=>{await e.allReady;let t=await ep(e);return{html:t,head:eB}});let o=await eZ((0,y.jsx)(e6,{children:(0,y.jsx)(e4,{children:eX(r,n,{...m,router:eR})})}));return{html:o,head:eB}},r={...e3,renderPage:t},n=await Q(el,r);if(V(s)&&!ev)return null;if(!n||"string"!=typeof n.html){let e=`"${G(el)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;throw Error(e)}return{docProps:n,documentCtx:r}}el[C.wU];let o=(e,t)=>{let r=e||ea,n=t||ed;return e3.err&&$?(0,y.jsx)(e6,{children:(0,y.jsx)($,{error:e3.err})}):(0,y.jsx)(e6,{children:(0,y.jsx)(e4,{children:eX(r,n,{...m,router:eR})})})},a=async(e,t)=>{let r=o(e,t);return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eo.getTracer)().trace(es.k0.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:P(),element:r})},i=(0,eo.getTracer)().wrap(es.xj.createBodyResult,(e,t)=>eh(e,{suffix:t,inlinedDataStream:void 0,isStaticGeneration:!0,getServerInsertedHTML:()=>eZ(e8()),serverInsertedHTMLToHead:!1,validateRootLayout:void 0})),l=!!el.getInitialProps;if(l){if(null===(t=await n(a)))return null;let{docProps:r}=t;e=e=>i(ec(r.html+e))}else{let r=await a(ea,ed);e=e=>i(r,e),t={}}let{docProps:d}=t||{};return l?(r=d.styles,eB=d.head):(r=ek.styles(),ek.flush()),{bodyResult:e,documentElement:e=>(0,y.jsx)(el,{...e,...d}),head:eB,headTags:[],styles:r}};null==(u=(0,eo.getTracer)().getRootSpanAttributes())||u.set("next.route",l.page);let e7=await (0,eo.getTracer)().trace(es.xj.renderDocument,{spanName:`render route (pages) ${l.page}`,attributes:{"next.route":l.page}},async()=>e5());if(!e7)return new eT(null,{metadata:v});let te=new Set,tt=new Set;for(let e of eW){let t=E[e];t&&(te.add(t.id),t.files.forEach(e=>{tt.add(e)}))}let tr=eM.hybrid,tn={},{assetPrefix:to,buildId:ts,customServer:ta,defaultLocale:ti,disableOptimizedLoading:tl,domainLocales:td,locale:tu,locales:tc,runtimeConfig:tp}=l,th={__NEXT_DATA__:{props:m,page:a,query:i,buildId:ts,assetPrefix:""===to?void 0:to,runtimeConfig:tp,nextExport:!0===e2||void 0,autoExport:!0===e_||void 0,isFallback:ef,isExperimentalCompile:ee,dynamicIds:0===te.size?void 0:Array.from(te),err:l.err?(p=l.err,w?(g="server",g=p[eG]||"server",{name:p.name,source:g,message:eN()(p.message),stack:p.stack,digest:p.digest}):{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}):void 0,gsp:!!I||void 0,gssp:!!M||void 0,customServer:ta,gip:!!eb||void 0,appGip:!ex||void 0,locale:tu,locales:tc,defaultLocale:ti,domainLocales:td,isPreview:!0===f||void 0,notFoundSrcPage:eg&&w?eg:void 0},strictNextHead:l.strictNextHead,buildManifest:e9,docComponentsRendered:tn,dangerousAsPath:eR.asPath,canonicalBase:!l.ampPath&&et(n,"didStripLocale")?`${l.canonicalBase||""}/${l.locale}`:l.canonicalBase,ampPath:S,inAmpMode:ez,isDevelopment:!!w,hybridAmp:tr,dynamicImports:Array.from(tt),assetPrefix:to,unstable_runtimeJS:void 0,unstable_JsPreload:R.unstable_JsPreload,assetQueryString:ei,scriptLoader:eO,locale:tu,disableOptimizedLoading:tl,head:e7.head,headTags:e7.headTags,styles:e7.styles,crossOrigin:l.crossOrigin,optimizeCss:l.optimizeCss,optimizeFonts:l.optimizeFonts,nextConfigOutput:l.nextConfigOutput,nextScriptWorkers:l.nextScriptWorkers,runtime:K,largePageDataBytes:l.largePageDataBytes,nextFontManifest:l.nextFontManifest},tm=(0,y.jsx)(L.Provider,{value:eM,children:(0,y.jsx)(X.Provider,{value:th,children:e7.documentElement(th)})}),tf=await (0,eo.getTracer)().trace(es.xj.renderToString,async()=>eZ(tm));{let e=[];for(let t of["Main","Head","NextScript","Html"])tn[t]||e.push(t);if(e.length){let t=e.map(e=>`<${e} />`).join(", "),r=1!==e.length?"s":"";console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${r}.
 Missing component${r}: ${t}
-Read how to fix here: https://nextjs.org/docs/messages/missing-document-component`)}}let[tf,tg]=tm.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),tv="";tm.startsWith(eV)||(tv+=eV),tv+=tf,eM&&(tv+="<!-- __NEXT_DATA__ -->");let ty=await ep(eu(ec(tv),await e5.bodyResult(tg))),tx=await o(a,ty,l,{inAmpMode:eM,hybridAmp:tt});return new eT(tx,{metadata:v})}let e4=(e,t,r,n,o)=>e1(e,t,r,n,o,o),e3=w().createContext(null);function e2(e){let t=(0,b.useContext)(e3);t&&t(e)}class e8 extends v{constructor(e){super(e),this.components=e.components}render(e,t,r){return e1(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document})}}let e9={contexts:g},e6=e8})(),module.exports=n})();
+Read how to fix here: https://nextjs.org/docs/messages/missing-document-component`)}}let[tg,tv]=tf.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),ty="";tf.startsWith(eV)||(ty+=eV),ty+=tg,ez&&(ty+="<!-- __NEXT_DATA__ -->");let tx=await ep(eu(ec(ty),await e7.bodyResult(tv))),tb=await o(a,tx,l,{inAmpMode:ez,hybridAmp:tr});return new eT(tb,{metadata:v})}let e4=(e,t,r,n,o)=>e1(e,t,r,n,o,o),e3=w().createContext(null);function e2(e){let t=(0,b.useContext)(e3);t&&t(e)}class e8 extends v{constructor(e){super(e),this.components=e.components}render(e,t,r){return e1(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document})}}let e9={contexts:g},e6=e8})(),module.exports=n})();
 //# sourceMappingURL=pages.runtime.dev.js.map
\ No newline at end of file
Diff for pages.runtime.prod.js
@@ -19,14 +19,14 @@ Reason: ${n}`)}}function N(e,t,r){if(!T(r))throw new $(e,t,"",`Props must be ret
 
 Keys that need to be moved: ${t.join(", ")}.
 Read more: https://nextjs.org/docs/messages/${r}`};function eK(e,t,r){let{destination:n,permanent:o,statusCode:s,basePath:a}=e,i=[],l=void 0!==s,u=void 0!==o;u&&l?i.push("`permanent` and `statusCode` can not both be provided"):u&&"boolean"!=typeof o?i.push("`permanent` must be `true` or `false`"):l&&!er.has(s)&&i.push(`\`statusCode\` must undefined or one of ${[...er].join(", ")}`);let d=typeof n;"string"!==d&&i.push(`\`destination\` should be string but received ${d}`);let c=typeof a;if("undefined"!==c&&"boolean"!==c&&i.push(`\`basePath\` should be undefined or a false, received ${c}`),i.length>0)throw Error(`Invalid redirect object returned from ${r} for ${t.url}
-`+i.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp")}async function e0(n,s,a,i,l,u){var d,c,p;let h,f,m,g;(0,x.gk)({req:n},"cookies",(c=n.headers,function(){let{cookie:e}=c;if(!e)return{};let{parse:t}=r("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)}));let v={};if(v.assetQueryString=l.dev&&l.assetQueryString||"",l.dev&&!v.assetQueryString){let e=(n.headers["user-agent"]||"").toLowerCase();e.includes("safari")&&!e.includes("chrome")&&(v.assetQueryString=`?ts=${Date.now()}`)}l.deploymentId&&(v.assetQueryString+=`${v.assetQueryString?"&":"?"}dpl=${l.deploymentId}`),i=Object.assign({},i);let{err:b,dev:w=!1,ampPath:S="",pageConfig:R={},buildManifest:T,reactLoadableManifest:E,ErrorDebug:$,getStaticProps:I,getStaticPaths:k,getServerSideProps:M,isDataReq:q,params:D,previewProps:F,basePath:U,images:Z,runtime:K,isExperimentalCompile:ee}=l,{App:er}=u,ea=v.assetQueryString,ei=u.Document,el=l.Component,eu=!!i.__nextFallback,em=i.__nextNotFoundSrcPage;!function(e){for(let t of eL)delete e[t]}(i);let eg=!!I,ev=eg&&l.nextExport,ey=er.getInitialProps===er.origGetInitialProps,ex=!!(null==el?void 0:el.getInitialProps),eb=null==el?void 0:el.unstable_scriptLoader,ew=J(a),eS="/_error"===a&&el.getInitialProps===el.origGetInitialProps;l.nextExport&&ex&&!eS&&t(`Detected getInitialProps on page '${a}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting.
-Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let eP=!ex&&ey&&!eg&&!M;if(eP&&!w&&ee&&(s.setHeader("Cache-Control","number"==typeof!1?"s-maxage=false, stale-while-revalidate":`s-maxage=${j.BR}, stale-while-revalidate`),eP=!1),ex&&eg)throw Error(j.wh+` ${a}`);if(ex&&M)throw Error(j.Wo+` ${a}`);if(M&&eg)throw Error(j.oL+` ${a}`);if(M&&"export"===l.nextConfigOutput)throw Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if(k&&!ew)throw Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${a}'.
-Read more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);if(k&&!eg)throw Error(`getStaticPaths was added without a getStaticProps in ${a}. Without getStaticProps, getStaticPaths does nothing`);if(eg&&ew&&!k)throw Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${a}'.
-Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);let e_=l.resolvedAsPath||n.url;if(w){let{isValidElementType:e}=r("./dist/compiled/react-is/index.js");if(!e(el))throw Error(`The default export is not a React Component in page: "${a}"`);if(!e(er))throw Error('The default export is not a React Component in page: "/_app"');if(!e(ei))throw Error('The default export is not a React Component in page: "/_document"');if((eP||eu)&&(i={...i.amp?{amp:i.amp}:{}},e_=`${a}${n.url.endsWith("/")&&"/"!==a&&!ew?"/":""}`,n.url=a),"/404"===a&&(ex||M))throw Error(`\`pages/404\` ${j.Ei}`);if(C.Er.includes(a)&&(ex||M))throw Error(`\`pages${a}\` ${j.Ei}`)}for(let e of["getStaticProps","getServerSideProps","getStaticPaths"])if(null==el?void 0:el[e])throw Error(`page ${a} ${e} ${j.lk}`);await H.preloadAll(),(eg||M)&&!eu&&F&&(m=!1!==(h=e(n,s,F)));let ej=!!(M||ex||!ey&&!eg||ee),eC=new eZ(a,i,e_,{isFallback:eu},ej,U,l.locale,l.locales,l.defaultLocale,l.domainLocales,m,et(n,"isLocaleDomain")),eR={back(){eC.back()},forward(){eC.forward()},refresh(){eC.reload()},push(e,t){let{scroll:r}=void 0===t?{}:t;eC.push(e,void 0,{scroll:r})},replace(e,t){let{scroll:r}=void 0===t?{}:t;eC.replace(e,void 0,{scroll:r})},prefetch(e){eC.prefetch(e)}},e$={},eO=(0,_.createStyleRegistry)(),ek={ampFirst:!0===R.amp,hasQuery:!!i.amp,hybrid:"hybrid"===R.amp},eM=function(e){let{ampFirst:t=!1,hybrid:r=!1,hasQuery:n=!1}=void 0===e?{}:e;return t||r&&n}(ek),ez=function(e){void 0===e&&(e=!1);let t=[(0,y.jsx)("meta",{charSet:"utf-8"})];return e||t.push((0,y.jsx)("meta",{name:"viewport",content:"width=device-width"})),t}(eM),eB=[],eW={};eb&&(eW.beforeInteractive=[].concat(eb()).filter(e=>"beforeInteractive"===e.props.strategy).map(e=>e.props));let eU=({children:e})=>{var t;return(0,y.jsx)(eH.Provider,{value:eR,children:(0,y.jsx)(eA.Provider,{value:eC.isReady&&eC.query?(t=eC.asPath,new URL(t,"http://n").searchParams):new URLSearchParams,children:(0,y.jsx)(eF,{router:eC,isAutoExport:eP,children:(0,y.jsx)(eI.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={},r=function(e){let{parameterizedRoute:t,groups:r}=function(e){let t=ef(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{let t=W.find(t=>e.startsWith(t)),o=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&o){let{key:e,optional:s,repeat:a}=eD(o[1]);return r[e]={pos:n++,repeat:a,optional:s},"/"+eq(t)+"([^/]+?)"}if(!o)return"/"+eq(e);{let{key:e,repeat:t,optional:s}=eD(o[1]);return r[e]={pos:n++,repeat:t,optional:s},t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:r}}(e.pathname),n=Object.keys(r.groups);for(let r of n)t[r]=e.query[r];return t}(eC),children:(0,y.jsx)(z.Provider,{value:eC,children:(0,y.jsx)(L.Provider,{value:ek,children:(0,y.jsx)(A.Provider,{value:{updateHead:e=>{ez=e},updateScripts:e=>{e$=e},scripts:eW,mountedInstances:new Set},children:(0,y.jsx)(O.Provider,{value:e=>eB.push(e),children:(0,y.jsx)(_.StyleRegistry,{registry:eO,children:(0,y.jsx)(eE.Provider,{value:Z,children:e})})})})})})})})})})},eV=()=>null,e0=({children:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(eV,{}),(0,y.jsx)(eU,{children:(0,y.jsxs)(y.Fragment,{children:[w?(0,y.jsxs)(y.Fragment,{children:[e,(0,y.jsx)(eV,{})]}):e,(0,y.jsx)(eV,{})]})})]}),e1={err:b,req:eP?void 0:n,res:eP?void 0:s,pathname:a,query:i,asPath:e_,locale:l.locale,locales:l.locales,defaultLocale:l.defaultLocale,AppTree:e=>(0,y.jsx)(e0,{children:eX(er,el,{...e,router:eC})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:n}=await e.renderPage({enhanceApp:e=>t=>(0,y.jsx)(e,{...t})}),o=eO.styles({nonce:t.nonce});return eO.flush(),{html:r,head:n,styles:o}}},e4=!eg&&(l.nextExport||w&&(eP||eu)),e3=()=>{let e=eO.styles();return eO.flush(),(0,y.jsx)(y.Fragment,{children:e})};if(f=await Q(er,{AppTree:e1.AppTree,Component:el,router:eC,ctx:e1}),(eg||M)&&m&&(f.__N_PREVIEW=!0),eg&&(f[C.NO]=!0),eg&&!eu){let e,t;try{e=await (0,eo.getTracer)().trace(es.xj.getStaticProps,{spanName:`getStaticProps ${a}`,attributes:{"next.route":a}},()=>I({...ew?{params:i}:void 0,...m?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Error(j.q6);let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Error(j.Eo);if(r.length)throw Error(eY("getStaticProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');v.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(eK(e.redirect,n,"getStaticProps"),ev)throw Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${n.url})
-See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0}if((w||ev)&&!v.isNotFound&&!N(a,"getStaticProps",e.props))throw Error("invariant: getStaticProps did not return valid props. Please report this.");if("revalidate"in e){if(e.revalidate&&"export"===l.nextConfigOutput)throw Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if("number"==typeof e.revalidate){if(Number.isInteger(e.revalidate)){if(e.revalidate<=0)throw Error(`A page's revalidate option can not be less than or equal to zero for ${n.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.
+`+i.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp")}async function e0(n,s,a,i,l,u){var d,c,p;let h,f,m,g;(0,x.gk)({req:n},"cookies",(c=n.headers,function(){let{cookie:e}=c;if(!e)return{};let{parse:t}=r("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)}));let v={};if(v.assetQueryString=l.dev&&l.assetQueryString||"",l.dev&&!v.assetQueryString){let e=(n.headers["user-agent"]||"").toLowerCase();e.includes("safari")&&!e.includes("chrome")&&(v.assetQueryString=`?ts=${Date.now()}`)}l.deploymentId&&(v.assetQueryString+=`${v.assetQueryString?"&":"?"}dpl=${l.deploymentId}`),i=Object.assign({},i);let{err:b,dev:w=!1,ampPath:S="",pageConfig:R={},buildManifest:T,reactLoadableManifest:E,ErrorDebug:$,getStaticProps:I,getStaticPaths:k,getServerSideProps:M,isDataReq:q,params:D,previewProps:F,basePath:U,images:Z,runtime:K,isExperimentalCompile:ee,swrDelta:er}=l,{App:ea}=u,ei=v.assetQueryString,el=u.Document,eu=l.Component,em=!!i.__nextFallback,eg=i.__nextNotFoundSrcPage;!function(e){for(let t of eL)delete e[t]}(i);let ev=!!I,ey=ev&&l.nextExport,ex=ea.getInitialProps===ea.origGetInitialProps,eb=!!(null==eu?void 0:eu.getInitialProps),ew=null==eu?void 0:eu.unstable_scriptLoader,eS=J(a),eP="/_error"===a&&eu.getInitialProps===eu.origGetInitialProps;l.nextExport&&eb&&!eP&&t(`Detected getInitialProps on page '${a}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting.
+Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let e_=!eb&&ex&&!ev&&!M;if(e_&&!w&&ee&&(s.setHeader("Cache-Control",function({revalidate:e,swrDelta:t}){let r=t?`stale-while-revalidate=${t}`:"stale-while-revalidate";return 0===e?"private, no-cache, no-store, max-age=0, must-revalidate":"number"==typeof e?`s-maxage=${e}, ${r}`:`s-maxage=${j.BR}, ${r}`}({revalidate:!1,swrDelta:er})),e_=!1),eb&&ev)throw Error(j.wh+` ${a}`);if(eb&&M)throw Error(j.Wo+` ${a}`);if(M&&ev)throw Error(j.oL+` ${a}`);if(M&&"export"===l.nextConfigOutput)throw Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if(k&&!eS)throw Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${a}'.
+Read more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);if(k&&!ev)throw Error(`getStaticPaths was added without a getStaticProps in ${a}. Without getStaticProps, getStaticPaths does nothing`);if(ev&&eS&&!k)throw Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${a}'.
+Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);let ej=l.resolvedAsPath||n.url;if(w){let{isValidElementType:e}=r("./dist/compiled/react-is/index.js");if(!e(eu))throw Error(`The default export is not a React Component in page: "${a}"`);if(!e(ea))throw Error('The default export is not a React Component in page: "/_app"');if(!e(el))throw Error('The default export is not a React Component in page: "/_document"');if((e_||em)&&(i={...i.amp?{amp:i.amp}:{}},ej=`${a}${n.url.endsWith("/")&&"/"!==a&&!eS?"/":""}`,n.url=a),"/404"===a&&(eb||M))throw Error(`\`pages/404\` ${j.Ei}`);if(C.Er.includes(a)&&(eb||M))throw Error(`\`pages${a}\` ${j.Ei}`)}for(let e of["getStaticProps","getServerSideProps","getStaticPaths"])if(null==eu?void 0:eu[e])throw Error(`page ${a} ${e} ${j.lk}`);await H.preloadAll(),(ev||M)&&!em&&F&&(m=!1!==(h=e(n,s,F)));let eC=!!(M||eb||!ex&&!ev||ee),eR=new eZ(a,i,ej,{isFallback:em},eC,U,l.locale,l.locales,l.defaultLocale,l.domainLocales,m,et(n,"isLocaleDomain")),e$={back(){eR.back()},forward(){eR.forward()},refresh(){eR.reload()},push(e,t){let{scroll:r}=void 0===t?{}:t;eR.push(e,void 0,{scroll:r})},replace(e,t){let{scroll:r}=void 0===t?{}:t;eR.replace(e,void 0,{scroll:r})},prefetch(e){eR.prefetch(e)}},eO={},ek=(0,_.createStyleRegistry)(),eM={ampFirst:!0===R.amp,hasQuery:!!i.amp,hybrid:"hybrid"===R.amp},ez=function(e){let{ampFirst:t=!1,hybrid:r=!1,hasQuery:n=!1}=void 0===e?{}:e;return t||r&&n}(eM),eB=function(e){void 0===e&&(e=!1);let t=[(0,y.jsx)("meta",{charSet:"utf-8"})];return e||t.push((0,y.jsx)("meta",{name:"viewport",content:"width=device-width"})),t}(ez),eW=[],eU={};ew&&(eU.beforeInteractive=[].concat(ew()).filter(e=>"beforeInteractive"===e.props.strategy).map(e=>e.props));let eV=({children:e})=>{var t;return(0,y.jsx)(eH.Provider,{value:e$,children:(0,y.jsx)(eA.Provider,{value:eR.isReady&&eR.query?(t=eR.asPath,new URL(t,"http://n").searchParams):new URLSearchParams,children:(0,y.jsx)(eF,{router:eR,isAutoExport:e_,children:(0,y.jsx)(eI.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={},r=function(e){let{parameterizedRoute:t,groups:r}=function(e){let t=ef(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{let t=W.find(t=>e.startsWith(t)),o=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&o){let{key:e,optional:s,repeat:a}=eD(o[1]);return r[e]={pos:n++,repeat:a,optional:s},"/"+eq(t)+"([^/]+?)"}if(!o)return"/"+eq(e);{let{key:e,repeat:t,optional:s}=eD(o[1]);return r[e]={pos:n++,repeat:t,optional:s},t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:r}}(e.pathname),n=Object.keys(r.groups);for(let r of n)t[r]=e.query[r];return t}(eR),children:(0,y.jsx)(z.Provider,{value:eR,children:(0,y.jsx)(L.Provider,{value:eM,children:(0,y.jsx)(A.Provider,{value:{updateHead:e=>{eB=e},updateScripts:e=>{eO=e},scripts:eU,mountedInstances:new Set},children:(0,y.jsx)(O.Provider,{value:e=>eW.push(e),children:(0,y.jsx)(_.StyleRegistry,{registry:ek,children:(0,y.jsx)(eE.Provider,{value:Z,children:e})})})})})})})})})})},e0=()=>null,e1=({children:e})=>(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(e0,{}),(0,y.jsx)(eV,{children:(0,y.jsxs)(y.Fragment,{children:[w?(0,y.jsxs)(y.Fragment,{children:[e,(0,y.jsx)(e0,{})]}):e,(0,y.jsx)(e0,{})]})})]}),e4={err:b,req:e_?void 0:n,res:e_?void 0:s,pathname:a,query:i,asPath:ej,locale:l.locale,locales:l.locales,defaultLocale:l.defaultLocale,AppTree:e=>(0,y.jsx)(e1,{children:eX(ea,eu,{...e,router:eR})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:n}=await e.renderPage({enhanceApp:e=>t=>(0,y.jsx)(e,{...t})}),o=ek.styles({nonce:t.nonce});return ek.flush(),{html:r,head:n,styles:o}}},e3=!ev&&(l.nextExport||w&&(e_||em)),e2=()=>{let e=ek.styles();return ek.flush(),(0,y.jsx)(y.Fragment,{children:e})};if(f=await Q(ea,{AppTree:e4.AppTree,Component:eu,router:eR,ctx:e4}),(ev||M)&&m&&(f.__N_PREVIEW=!0),ev&&(f[C.NO]=!0),ev&&!em){let e,t;try{e=await (0,eo.getTracer)().trace(es.xj.getStaticProps,{spanName:`getStaticProps ${a}`,attributes:{"next.route":a}},()=>I({...eS?{params:i}:void 0,...m?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Error(j.q6);let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Error(j.Eo);if(r.length)throw Error(eY("getStaticProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');v.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(eK(e.redirect,n,"getStaticProps"),ey)throw Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${n.url})
+See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0}if((w||ey)&&!v.isNotFound&&!N(a,"getStaticProps",e.props))throw Error("invariant: getStaticProps did not return valid props. Please report this.");if("revalidate"in e){if(e.revalidate&&"export"===l.nextConfigOutput)throw Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');if("number"==typeof e.revalidate){if(Number.isInteger(e.revalidate)){if(e.revalidate<=0)throw Error(`A page's revalidate option can not be less than or equal to zero for ${n.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.
 
 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\`.`);e.revalidate>31536e3&&console.warn(`Warning: A page's revalidate option was set to more than a year for ${n.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 Error(`A page's revalidate option must be seconds expressed as a natural number for ${n.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.`)}else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw 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 ${n.url}`)}else t=!1;if(f.pageProps=Object.assign({},f.pageProps,"props"in e?e.props:void 0),v.revalidate=t,v.pageData=f,v.isNotFound)return new eT(null,{metadata:v})}if(M&&(f[C.uY]=!0),M&&!eu){let e;let t=!1;try{e=await (0,eo.getTracer)().trace(es.xj.getServerSideProps,{spanName:`getServerSideProps ${a}`,attributes:{"next.route":a}},async()=>M({req:n,res:s,query:i,resolvedUrl:l.resolvedUrl,...ew?{params:D}:void 0,...!1!==h?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}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 Error(j.Lx);e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${a}`);if(e.unstable_redirect)throw Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${a}`);if(r.length)throw Error(eY("getServerSideProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');return v.isNotFound=!0,new eT(null,{metadata:v})}if("redirect"in e&&"object"==typeof e.redirect&&(eK(e.redirect,n,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0),t&&(e.props=await e.props),(w||ev)&&!N(a,"getServerSideProps",e.props))throw Error("invariant: getServerSideProps did not return valid props. Please report this.");f.pageProps=Object.assign({},f.pageProps,e.props),v.pageData=f}if(q&&!eg||v.isRedirect)return new eT(JSON.stringify(f),{metadata:v});if(eu&&(f.pageProps={}),V(s)&&!eg)return new eT(null,{metadata:v});let e2=T;if(eP&&ew){let e;let t=(e=(function(e){let t=/^\/index(\/|$)/.test(e)&&!J(e)?"/index"+e:"/"===e?"/index":B(e);{let{posix:e}=r("path"),n=e.normalize(t);if(n!==t)throw new X("Requested and resolved page mismatch: "+t+" "+n)}return t})(a).replace(/\\/g,"/")).startsWith("/index/")&&!J(e)?e.slice(6):"/index"!==e?e:"/";t in e2.pages&&(e2={...e2,pages:{...e2.pages,[t]:[...e2.pages[t],...e2.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:e2.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e8=({children:e})=>eM?e:(0,y.jsx)("div",{id:"__next",children:e}),e9=async()=>{let e,t,r;async function n(e){let t=async(t={})=>{if(e1.err&&$){e&&e(er,el);let t=await eQ((0,y.jsx)(e8,{children:(0,y.jsx)($,{error:e1.err})}));return{html:t,head:ez}}if(w&&(f.router||f.Component))throw Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props");let{App:r,Component:n}="function"==typeof t?{App:er,Component:t(el)}:{App:t.enhanceApp?t.enhanceApp(er):er,Component:t.enhanceComponent?t.enhanceComponent(el):el};if(e)return e(r,n).then(async e=>{await e.allReady;let t=await ep(e);return{html:t,head:ez}});let o=await eQ((0,y.jsx)(e8,{children:(0,y.jsx)(e0,{children:eX(r,n,{...f,router:eC})})}));return{html:o,head:ez}},r={...e1,renderPage:t},n=await Q(ei,r);if(V(s)&&!eg)return null;if(!n||"string"!=typeof n.html){let e=`"${G(ei)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;throw Error(e)}return{docProps:n,documentCtx:r}}ei[C.wU];let o=(e,t)=>{let r=e||er,n=t||el;return e1.err&&$?(0,y.jsx)(e8,{children:(0,y.jsx)($,{error:e1.err})}):(0,y.jsx)(e8,{children:(0,y.jsx)(e0,{children:eX(r,n,{...f,router:eC})})})},a=async(e,t)=>{let r=o(e,t);return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eo.getTracer)().trace(es.k0.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:P(),element:r})},i=(0,eo.getTracer)().wrap(es.xj.createBodyResult,(e,t)=>eh(e,{suffix:t,inlinedDataStream:void 0,isStaticGeneration:!0,getServerInsertedHTML:()=>eQ(e3()),serverInsertedHTMLToHead:!1,validateRootLayout:void 0})),l=!!ei.getInitialProps;if(l){if(null===(t=await n(a)))return null;let{docProps:r}=t;e=e=>i(ec(r.html+e))}else{let r=await a(er,el);e=e=>i(r,e),t={}}let{docProps:u}=t||{};return l?(r=u.styles,ez=u.head):(r=eO.styles(),eO.flush()),{bodyResult:e,documentElement:e=>(0,y.jsx)(ei,{...e,...u}),head:ez,headTags:[],styles:r}};null==(d=(0,eo.getTracer)().getRootSpanAttributes())||d.set("next.route",l.page);let e6=await (0,eo.getTracer)().trace(es.xj.renderDocument,{spanName:`render route (pages) ${l.page}`,attributes:{"next.route":l.page}},async()=>e9());if(!e6)return new eT(null,{metadata:v});let e5=new Set,e7=new Set;for(let e of eB){let t=E[e];t&&(e5.add(t.id),t.files.forEach(e=>{e7.add(e)}))}let te=ek.hybrid,{assetPrefix:tt,buildId:tr,customServer:tn,defaultLocale:to,disableOptimizedLoading:ts,domainLocales:ta,locale:ti,locales:tl,runtimeConfig:tu}=l,td={__NEXT_DATA__:{props:f,page:a,query:i,buildId:tr,assetPrefix:""===tt?void 0:tt,runtimeConfig:tu,nextExport:!0===e4||void 0,autoExport:!0===eP||void 0,isFallback:eu,isExperimentalCompile:ee,dynamicIds:0===e5.size?void 0:Array.from(e5),err:l.err?(p=l.err,w?(g="server",g=p[eJ]||"server",{name:p.name,source:g,message:eN()(p.message),stack:p.stack,digest:p.digest}):{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}):void 0,gsp:!!I||void 0,gssp:!!M||void 0,customServer:tn,gip:!!ex||void 0,appGip:!ey||void 0,locale:ti,locales:tl,defaultLocale:to,domainLocales:ta,isPreview:!0===m||void 0,notFoundSrcPage:em&&w?em:void 0},strictNextHead:l.strictNextHead,buildManifest:e2,docComponentsRendered:{},dangerousAsPath:eC.asPath,canonicalBase:!l.ampPath&&et(n,"didStripLocale")?`${l.canonicalBase||""}/${l.locale}`:l.canonicalBase,ampPath:S,inAmpMode:eM,isDevelopment:!!w,hybridAmp:te,dynamicImports:Array.from(e7),assetPrefix:tt,unstable_runtimeJS:R.unstable_runtimeJS,unstable_JsPreload:R.unstable_JsPreload,assetQueryString:ea,scriptLoader:e$,locale:ti,disableOptimizedLoading:ts,head:e6.head,headTags:e6.headTags,styles:e6.styles,crossOrigin:l.crossOrigin,optimizeCss:l.optimizeCss,optimizeFonts:l.optimizeFonts,nextConfigOutput:l.nextConfigOutput,nextScriptWorkers:l.nextScriptWorkers,runtime:K,largePageDataBytes:l.largePageDataBytes,nextFontManifest:l.nextFontManifest},tc=(0,y.jsx)(L.Provider,{value:ek,children:(0,y.jsx)(Y.Provider,{value:td,children:e6.documentElement(td)})}),tp=await (0,eo.getTracer)().trace(es.xj.renderToString,async()=>eQ(tc)),[th,tf]=tp.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),tm="";tp.startsWith(eG)||(tm+=eG),tm+=th,eM&&(tm+="<!-- __NEXT_DATA__ -->");let tg=await ep(ed(ec(tm),await e6.bodyResult(tf))),tv=await o(a,tg,l,{inAmpMode:eM,hybridAmp:te});return new eT(tv,{metadata:v})}let e1=(e,t,r,n,o)=>e0(e,t,r,n,o,o),e4=w().createContext(null);function e3(e){let t=(0,b.useContext)(e4);t&&t(e)}class e2 extends v{constructor(e){super(e),this.components=e.components}render(e,t,r){return e0(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document})}}let e8={contexts:g},e9=e2})(),module.exports=n})();
+Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`)}else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw 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 ${n.url}`)}else t=!1;if(f.pageProps=Object.assign({},f.pageProps,"props"in e?e.props:void 0),v.revalidate=t,v.pageData=f,v.isNotFound)return new eT(null,{metadata:v})}if(M&&(f[C.uY]=!0),M&&!em){let e;let t=!1;try{e=await (0,eo.getTracer)().trace(es.xj.getServerSideProps,{spanName:`getServerSideProps ${a}`,attributes:{"next.route":a}},async()=>M({req:n,res:s,query:i,resolvedUrl:l.resolvedUrl,...eS?{params:D}:void 0,...!1!==h?{draftMode:!0,preview:!0,previewData:h}:void 0,locales:l.locales,locale:l.locale,defaultLocale:l.defaultLocale}))}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 Error(j.Lx);e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${a}`);if(e.unstable_redirect)throw Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${a}`);if(r.length)throw Error(eY("getServerSideProps",r));if("notFound"in e&&e.notFound){if("/404"===a)throw Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!');return v.isNotFound=!0,new eT(null,{metadata:v})}if("redirect"in e&&"object"==typeof e.redirect&&(eK(e.redirect,n,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:en(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),v.isRedirect=!0),t&&(e.props=await e.props),(w||ey)&&!N(a,"getServerSideProps",e.props))throw Error("invariant: getServerSideProps did not return valid props. Please report this.");f.pageProps=Object.assign({},f.pageProps,e.props),v.pageData=f}if(q&&!ev||v.isRedirect)return new eT(JSON.stringify(f),{metadata:v});if(em&&(f.pageProps={}),V(s)&&!ev)return new eT(null,{metadata:v});let e8=T;if(e_&&eS){let e;let t=(e=(function(e){let t=/^\/index(\/|$)/.test(e)&&!J(e)?"/index"+e:"/"===e?"/index":B(e);{let{posix:e}=r("path"),n=e.normalize(t);if(n!==t)throw new X("Requested and resolved page mismatch: "+t+" "+n)}return t})(a).replace(/\\/g,"/")).startsWith("/index/")&&!J(e)?e.slice(6):"/index"!==e?e:"/";t in e8.pages&&(e8={...e8,pages:{...e8.pages,[t]:[...e8.pages[t],...e8.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:e8.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e9=({children:e})=>ez?e:(0,y.jsx)("div",{id:"__next",children:e}),e6=async()=>{let e,t,r;async function n(e){let t=async(t={})=>{if(e4.err&&$){e&&e(ea,eu);let t=await eQ((0,y.jsx)(e9,{children:(0,y.jsx)($,{error:e4.err})}));return{html:t,head:eB}}if(w&&(f.router||f.Component))throw Error("'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props");let{App:r,Component:n}="function"==typeof t?{App:ea,Component:t(eu)}:{App:t.enhanceApp?t.enhanceApp(ea):ea,Component:t.enhanceComponent?t.enhanceComponent(eu):eu};if(e)return e(r,n).then(async e=>{await e.allReady;let t=await ep(e);return{html:t,head:eB}});let o=await eQ((0,y.jsx)(e9,{children:(0,y.jsx)(e1,{children:eX(r,n,{...f,router:eR})})}));return{html:o,head:eB}},r={...e4,renderPage:t},n=await Q(el,r);if(V(s)&&!ev)return null;if(!n||"string"!=typeof n.html){let e=`"${G(el)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;throw Error(e)}return{docProps:n,documentCtx:r}}el[C.wU];let o=(e,t)=>{let r=e||ea,n=t||eu;return e4.err&&$?(0,y.jsx)(e9,{children:(0,y.jsx)($,{error:e4.err})}):(0,y.jsx)(e9,{children:(0,y.jsx)(e1,{children:eX(r,n,{...f,router:eR})})})},a=async(e,t)=>{let r=o(e,t);return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eo.getTracer)().trace(es.k0.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:P(),element:r})},i=(0,eo.getTracer)().wrap(es.xj.createBodyResult,(e,t)=>eh(e,{suffix:t,inlinedDataStream:void 0,isStaticGeneration:!0,getServerInsertedHTML:()=>eQ(e2()),serverInsertedHTMLToHead:!1,validateRootLayout:void 0})),l=!!el.getInitialProps;if(l){if(null===(t=await n(a)))return null;let{docProps:r}=t;e=e=>i(ec(r.html+e))}else{let r=await a(ea,eu);e=e=>i(r,e),t={}}let{docProps:u}=t||{};return l?(r=u.styles,eB=u.head):(r=ek.styles(),ek.flush()),{bodyResult:e,documentElement:e=>(0,y.jsx)(el,{...e,...u}),head:eB,headTags:[],styles:r}};null==(d=(0,eo.getTracer)().getRootSpanAttributes())||d.set("next.route",l.page);let e5=await (0,eo.getTracer)().trace(es.xj.renderDocument,{spanName:`render route (pages) ${l.page}`,attributes:{"next.route":l.page}},async()=>e6());if(!e5)return new eT(null,{metadata:v});let e7=new Set,te=new Set;for(let e of eW){let t=E[e];t&&(e7.add(t.id),t.files.forEach(e=>{te.add(e)}))}let tt=eM.hybrid,{assetPrefix:tr,buildId:tn,customServer:to,defaultLocale:ts,disableOptimizedLoading:ta,domainLocales:ti,locale:tl,locales:tu,runtimeConfig:td}=l,tc={__NEXT_DATA__:{props:f,page:a,query:i,buildId:tn,assetPrefix:""===tr?void 0:tr,runtimeConfig:td,nextExport:!0===e3||void 0,autoExport:!0===e_||void 0,isFallback:em,isExperimentalCompile:ee,dynamicIds:0===e7.size?void 0:Array.from(e7),err:l.err?(p=l.err,w?(g="server",g=p[eJ]||"server",{name:p.name,source:g,message:eN()(p.message),stack:p.stack,digest:p.digest}):{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}):void 0,gsp:!!I||void 0,gssp:!!M||void 0,customServer:to,gip:!!eb||void 0,appGip:!ex||void 0,locale:tl,locales:tu,defaultLocale:ts,domainLocales:ti,isPreview:!0===m||void 0,notFoundSrcPage:eg&&w?eg:void 0},strictNextHead:l.strictNextHead,buildManifest:e8,docComponentsRendered:{},dangerousAsPath:eR.asPath,canonicalBase:!l.ampPath&&et(n,"didStripLocale")?`${l.canonicalBase||""}/${l.locale}`:l.canonicalBase,ampPath:S,inAmpMode:ez,isDevelopment:!!w,hybridAmp:tt,dynamicImports:Array.from(te),assetPrefix:tr,unstable_runtimeJS:R.unstable_runtimeJS,unstable_JsPreload:R.unstable_JsPreload,assetQueryString:ei,scriptLoader:eO,locale:tl,disableOptimizedLoading:ta,head:e5.head,headTags:e5.headTags,styles:e5.styles,crossOrigin:l.crossOrigin,optimizeCss:l.optimizeCss,optimizeFonts:l.optimizeFonts,nextConfigOutput:l.nextConfigOutput,nextScriptWorkers:l.nextScriptWorkers,runtime:K,largePageDataBytes:l.largePageDataBytes,nextFontManifest:l.nextFontManifest},tp=(0,y.jsx)(L.Provider,{value:eM,children:(0,y.jsx)(Y.Provider,{value:tc,children:e5.documentElement(tc)})}),th=await (0,eo.getTracer)().trace(es.xj.renderToString,async()=>eQ(tp)),[tf,tm]=th.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>",2),tg="";th.startsWith(eG)||(tg+=eG),tg+=tf,ez&&(tg+="<!-- __NEXT_DATA__ -->");let tv=await ep(ed(ec(tg),await e5.bodyResult(tm))),ty=await o(a,tv,l,{inAmpMode:ez,hybridAmp:tt});return new eT(ty,{metadata:v})}let e1=(e,t,r,n,o)=>e0(e,t,r,n,o,o),e4=w().createContext(null);function e3(e){let t=(0,b.useContext)(e4);t&&t(e)}class e2 extends v{constructor(e){super(e),this.components=e.components}render(e,t,r){return e0(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document})}}let e8={contexts:g},e9=e2})(),module.exports=n})();
 //# sourceMappingURL=pages.runtime.prod.js.map
\ No newline at end of file
Diff for server.runtime.prod.js

Diff too large to display

Commit: 10d9c2e

@ijjk
Copy link
Member

ijjk commented Feb 5, 2024

Actually I'm not sure this change is safe, since if a CDN isn't present in front of Next.js then the client may unexpectedly consume this header instead causing unexpected behavior.

We should confirm this first before changing

@ijjk ijjk dismissed their stale review February 5, 2024 00:46

follow-up review

@adrianha
Copy link
Contributor Author

adrianha commented Feb 5, 2024

@ijjk do you have suggestion how to test it? was checked running production build locally, there seems no difference. as for case with CDN, tested in Cloudfront, it allows Cloudfront to serve STALE content while it revalidated in the background thus response RefreshHit, previously the response were only Hit or Miss

@ijjk
Copy link
Member

ijjk commented Feb 5, 2024

Was just double checking through https://datatracker.ietf.org/doc/html/rfc5861#section-3.1 and this may be fine. If a user does have a CDN in front of Next.js (most likely) then their CDN will dictate the behavior and then if there isn't a CDN then s-maxage will be ignored and then the client will be able to fallback to stale-while-revalidate behavior if supported which should match most CDN's handling

Also was reminded a previous PR we decided this was acceptable that failed to land #52251

@adrianha
Copy link
Contributor Author

adrianha commented Feb 5, 2024

thanks for the confirmation @ijjk !

@adrianha
Copy link
Contributor Author

adrianha commented Feb 13, 2024

hi @ijjk , just adjusted some tests on prefetching, could you help to re-run the tests? changes on #61794 looks like related with rsc payload that impacting the tests

@adrianha
Copy link
Contributor Author

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

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

@adrianha what do you think about putting this change behind an experimental flag and leaving the default to false so that we avoid any breaking/test changes being needed by default and those who need it can opt-in?

@adrianha
Copy link
Contributor Author

do you mean adding new option to define swr on ISR pages @ijjk ?

ex:
{
revalidate: 600,
staleWhileRevalidate: 6000,
}

@ijjk
Copy link
Member

ijjk commented Feb 15, 2024

No I mean an experimental config in next.config.js like exposeSwrDelta, that toggles it being set or not and it's defaulted to false which is the current behavior.

@adrianha
Copy link
Contributor Author

hi @ijjk, just added swrDelta option to next.config.js for specifying stale-while-revalidate delta amount

@ijjk ijjk merged commit 92fdcc7 into vercel:canary Feb 19, 2024
64 checks passed
@adrianha adrianha deleted the set-swr-delta branch February 28, 2024 06:52
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 14, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

stale-while-revalidate header used without delta-seconds
3 participants