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

fix: set swr delta

Open adrianha opened this issue 1 year ago • 18 comments
trafficstars

Closes: https://github.com/vercel/next.js/pull/52251 Closes: https://github.com/vercel/next.js/issues/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 avatar Jan 29 '24 14:01 adrianha

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

adrianha avatar Jan 29 '24 15:01 adrianha

Allow CI Workflow Run

  • [x] approve CI run for commit: 4b91b9fdd86f0539852856128cf17d0b0c9196d2

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

ijjk avatar Feb 03 '24 17:02 ijjk

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

adrianha avatar Feb 05 '24 00:02 adrianha

Tests Passed

ijjk avatar Feb 05 '24 00:02 ijjk

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: 10d9c2eaebde2a3e4b88a98f3e645cc34a6e2f47

ijjk avatar Feb 05 '24 00:02 ijjk

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 avatar Feb 05 '24 00:02 ijjk

@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

adrianha avatar Feb 05 '24 00:02 adrianha

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 https://github.com/vercel/next.js/pull/52251

ijjk avatar Feb 05 '24 01:02 ijjk

thanks for the confirmation @ijjk !

adrianha avatar Feb 05 '24 01:02 adrianha

reverted /gssp test value as swr is not defined https://github.com/vercel/next.js/blob/canary/test/production/standalone-mode/required-server-files/pages/gssp.js#L8 @ijjk

adrianha avatar Feb 05 '24 02:02 adrianha

could you help to re-run the CI checks @ijjk ? also not sure why its failing on prefetch test

adrianha avatar Feb 06 '24 00:02 adrianha

Yeah triggered run, I think the prefetch failure is due to the browser having the additional caching now which the test assumes it doesn't

ijjk avatar Feb 06 '24 00:02 ijjk

its failed to set up the runner now

adrianha avatar Feb 06 '24 00:02 adrianha

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 avatar Feb 13 '24 01:02 adrianha

hi @ijjk,

  • just removed rsc test case on this commit, due to changes on #61794 and #61235 that removes next-url changes that was added on #52746, kindly help to confirm if this removal is expected
  • also want to confirm if https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/router-reducer/fetch-server-response.ts#L86 should be removed? referring to NEXT_URL removal on https://github.com/vercel/next.js/pull/61794/files#diff-90d1d5f446bdf243be25cc4ea2295a9c91508859d655e51d5ec4a3562d3a24d9R1105

adrianha avatar Feb 14 '24 10:02 adrianha

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

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

adrianha avatar Feb 15 '24 01:02 adrianha

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.

ijjk avatar Feb 15 '24 02:02 ijjk

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

adrianha avatar Feb 17 '24 09:02 adrianha