You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			1022 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			1022 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			JavaScript
		
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|     value: true
 | |
| });
 | |
| 0 && (module.exports = {
 | |
|     errorToJSON: null,
 | |
|     renderToHTMLImpl: null,
 | |
|     renderToHTML: null
 | |
| });
 | |
| function _export(target, all) {
 | |
|     for(var name in all)Object.defineProperty(target, name, {
 | |
|         enumerable: true,
 | |
|         get: all[name]
 | |
|     });
 | |
| }
 | |
| _export(exports, {
 | |
|     errorToJSON: function() {
 | |
|         return errorToJSON;
 | |
|     },
 | |
|     renderToHTMLImpl: function() {
 | |
|         return renderToHTMLImpl;
 | |
|     },
 | |
|     renderToHTML: function() {
 | |
|         return renderToHTML;
 | |
|     }
 | |
| });
 | |
| const _jsxruntime = require("react/jsx-runtime");
 | |
| const _apiutils = require("./api-utils");
 | |
| const _getcookieparser = require("./api-utils/get-cookie-parser");
 | |
| const _react = /*#__PURE__*/ _interop_require_default(require("react"));
 | |
| const _serverbrowser = /*#__PURE__*/ _interop_require_default(require("react-dom/server.browser"));
 | |
| const _styledjsx = require("styled-jsx");
 | |
| const _constants = require("../lib/constants");
 | |
| const _constants1 = require("../shared/lib/constants");
 | |
| const _isserializableprops = require("../lib/is-serializable-props");
 | |
| const _ampmode = require("../shared/lib/amp-mode");
 | |
| const _ampcontextsharedruntime = require("../shared/lib/amp-context.shared-runtime");
 | |
| const _head = require("../shared/lib/head");
 | |
| const _headmanagercontextsharedruntime = require("../shared/lib/head-manager-context.shared-runtime");
 | |
| const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default(require("../shared/lib/loadable.shared-runtime"));
 | |
| const _loadablecontextsharedruntime = require("../shared/lib/loadable-context.shared-runtime");
 | |
| const _routercontextsharedruntime = require("../shared/lib/router-context.shared-runtime");
 | |
| const _isdynamic = require("../shared/lib/router/utils/is-dynamic");
 | |
| const _utils = require("../shared/lib/utils");
 | |
| const _htmlcontextsharedruntime = require("../shared/lib/html-context.shared-runtime");
 | |
| const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path");
 | |
| const _denormalizepagepath = require("../shared/lib/page-path/denormalize-page-path");
 | |
| const _requestmeta = require("./request-meta");
 | |
| const _redirectstatus = require("../lib/redirect-status");
 | |
| const _renderresult = /*#__PURE__*/ _interop_require_default(require("./render-result"));
 | |
| const _iserror = /*#__PURE__*/ _interop_require_default(require("../lib/is-error"));
 | |
| const _nodewebstreamshelper = require("./stream-utils/node-web-streams-helper");
 | |
| const _imageconfigcontextsharedruntime = require("../shared/lib/image-config-context.shared-runtime");
 | |
| const _stripansi = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/strip-ansi"));
 | |
| const _internalutils = require("./internal-utils");
 | |
| const _adapters = require("../shared/lib/router/adapters");
 | |
| const _approutercontextsharedruntime = require("../shared/lib/app-router-context.shared-runtime");
 | |
| const _hooksclientcontextsharedruntime = require("../shared/lib/hooks-client-context.shared-runtime");
 | |
| const _tracer = require("./lib/trace/tracer");
 | |
| const _constants2 = require("./lib/trace/constants");
 | |
| const _reflect = require("./web/spec-extension/adapters/reflect");
 | |
| const _revalidate = require("./lib/revalidate");
 | |
| function _interop_require_default(obj) {
 | |
|     return obj && obj.__esModule ? obj : {
 | |
|         default: obj
 | |
|     };
 | |
| }
 | |
| let tryGetPreviewData;
 | |
| let warn;
 | |
| let postProcessHTML;
 | |
| const DOCTYPE = "<!DOCTYPE html>";
 | |
| if (process.env.NEXT_RUNTIME !== "edge") {
 | |
|     tryGetPreviewData = require("./api-utils/node/try-get-preview-data").tryGetPreviewData;
 | |
|     warn = require("../build/output/log").warn;
 | |
|     postProcessHTML = require("./post-process").postProcessHTML;
 | |
| } else {
 | |
|     warn = console.warn.bind(console);
 | |
|     postProcessHTML = async (_pathname, html)=>html;
 | |
| }
 | |
| function noRouter() {
 | |
|     const message = 'No router instance found. you should only use "next/router" inside the client side of your app. https://nextjs.org/docs/messages/no-router-instance';
 | |
|     throw new Error(message);
 | |
| }
 | |
| async function renderToString(element) {
 | |
|     const renderStream = await _serverbrowser.default.renderToReadableStream(element);
 | |
|     await renderStream.allReady;
 | |
|     return (0, _nodewebstreamshelper.streamToString)(renderStream);
 | |
| }
 | |
| class ServerRouter {
 | |
|     constructor(pathname, query, as, { isFallback }, isReady, basePath, locale, locales, defaultLocale, domainLocales, isPreview, isLocaleDomain){
 | |
|         this.route = pathname.replace(/\/$/, "") || "/";
 | |
|         this.pathname = pathname;
 | |
|         this.query = query;
 | |
|         this.asPath = as;
 | |
|         this.isFallback = isFallback;
 | |
|         this.basePath = basePath;
 | |
|         this.locale = locale;
 | |
|         this.locales = locales;
 | |
|         this.defaultLocale = defaultLocale;
 | |
|         this.isReady = isReady;
 | |
|         this.domainLocales = domainLocales;
 | |
|         this.isPreview = !!isPreview;
 | |
|         this.isLocaleDomain = !!isLocaleDomain;
 | |
|     }
 | |
|     push() {
 | |
|         noRouter();
 | |
|     }
 | |
|     replace() {
 | |
|         noRouter();
 | |
|     }
 | |
|     reload() {
 | |
|         noRouter();
 | |
|     }
 | |
|     back() {
 | |
|         noRouter();
 | |
|     }
 | |
|     forward() {
 | |
|         noRouter();
 | |
|     }
 | |
|     prefetch() {
 | |
|         noRouter();
 | |
|     }
 | |
|     beforePopState() {
 | |
|         noRouter();
 | |
|     }
 | |
| }
 | |
| function enhanceComponents(options, App, Component) {
 | |
|     // For backwards compatibility
 | |
|     if (typeof options === "function") {
 | |
|         return {
 | |
|             App,
 | |
|             Component: options(Component)
 | |
|         };
 | |
|     }
 | |
|     return {
 | |
|         App: options.enhanceApp ? options.enhanceApp(App) : App,
 | |
|         Component: options.enhanceComponent ? options.enhanceComponent(Component) : Component
 | |
|     };
 | |
| }
 | |
| function renderPageTree(App, Component, props) {
 | |
|     return /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
 | |
|         Component: Component,
 | |
|         ...props
 | |
|     });
 | |
| }
 | |
| const invalidKeysMsg = (methodName, invalidKeys)=>{
 | |
|     const docsPathname = `invalid-${methodName.toLocaleLowerCase()}-value`;
 | |
|     return `Additional keys were returned from \`${methodName}\`. Properties intended for your component must be nested under the \`props\` key, e.g.:` + `\n\n\treturn { props: { title: 'My Title', content: '...' } }` + `\n\nKeys that need to be moved: ${invalidKeys.join(", ")}.` + `\nRead more: https://nextjs.org/docs/messages/${docsPathname}`;
 | |
| };
 | |
| function checkRedirectValues(redirect, req, method) {
 | |
|     const { destination, permanent, statusCode, basePath } = redirect;
 | |
|     let errors = [];
 | |
|     const hasStatusCode = typeof statusCode !== "undefined";
 | |
|     const hasPermanent = typeof permanent !== "undefined";
 | |
|     if (hasPermanent && hasStatusCode) {
 | |
|         errors.push(`\`permanent\` and \`statusCode\` can not both be provided`);
 | |
|     } else if (hasPermanent && typeof permanent !== "boolean") {
 | |
|         errors.push(`\`permanent\` must be \`true\` or \`false\``);
 | |
|     } else if (hasStatusCode && !_redirectstatus.allowedStatusCodes.has(statusCode)) {
 | |
|         errors.push(`\`statusCode\` must undefined or one of ${[
 | |
|             ..._redirectstatus.allowedStatusCodes
 | |
|         ].join(", ")}`);
 | |
|     }
 | |
|     const destinationType = typeof destination;
 | |
|     if (destinationType !== "string") {
 | |
|         errors.push(`\`destination\` should be string but received ${destinationType}`);
 | |
|     }
 | |
|     const basePathType = typeof basePath;
 | |
|     if (basePathType !== "undefined" && basePathType !== "boolean") {
 | |
|         errors.push(`\`basePath\` should be undefined or a false, received ${basePathType}`);
 | |
|     }
 | |
|     if (errors.length > 0) {
 | |
|         throw new Error(`Invalid redirect object returned from ${method} for ${req.url}\n` + errors.join(" and ") + "\n" + `See more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp`);
 | |
|     }
 | |
| }
 | |
| function errorToJSON(err) {
 | |
|     let source = "server";
 | |
|     if (process.env.NEXT_RUNTIME !== "edge") {
 | |
|         source = require("next/dist/compiled/@next/react-dev-overlay/dist/middleware").getErrorSource(err) || "server";
 | |
|     }
 | |
|     return {
 | |
|         name: err.name,
 | |
|         source,
 | |
|         message: (0, _stripansi.default)(err.message),
 | |
|         stack: err.stack,
 | |
|         digest: err.digest
 | |
|     };
 | |
| }
 | |
| function serializeError(dev, err) {
 | |
|     if (dev) {
 | |
|         return errorToJSON(err);
 | |
|     }
 | |
|     return {
 | |
|         name: "Internal Server Error.",
 | |
|         message: "500 - Internal Server Error.",
 | |
|         statusCode: 500
 | |
|     };
 | |
| }
 | |
| async function renderToHTMLImpl(req, res, pathname, query, renderOpts, extra) {
 | |
|     var _getTracer_getRootSpanAttributes;
 | |
|     // Adds support for reading `cookies` in `getServerSideProps` when SSR.
 | |
|     (0, _apiutils.setLazyProp)({
 | |
|         req: req
 | |
|     }, "cookies", (0, _getcookieparser.getCookieParser)(req.headers));
 | |
|     const metadata = {};
 | |
|     metadata.assetQueryString = renderOpts.dev && renderOpts.assetQueryString || "";
 | |
|     if (renderOpts.dev && !metadata.assetQueryString) {
 | |
|         const userAgent = (req.headers["user-agent"] || "").toLowerCase();
 | |
|         if (userAgent.includes("safari") && !userAgent.includes("chrome")) {
 | |
|             // In dev we invalidate the cache by appending a timestamp to the resource URL.
 | |
|             // This is a workaround to fix https://github.com/vercel/next.js/issues/5860
 | |
|             // TODO: remove this workaround when https://bugs.webkit.org/show_bug.cgi?id=187726 is fixed.
 | |
|             // Note: The workaround breaks breakpoints on reload since the script url always changes,
 | |
|             // so we only apply it to Safari.
 | |
|             metadata.assetQueryString = `?ts=${Date.now()}`;
 | |
|         }
 | |
|     }
 | |
|     // if deploymentId is provided we append it to all asset requests
 | |
|     if (renderOpts.deploymentId) {
 | |
|         metadata.assetQueryString += `${metadata.assetQueryString ? "&" : "?"}dpl=${renderOpts.deploymentId}`;
 | |
|     }
 | |
|     // don't modify original query object
 | |
|     query = Object.assign({}, query);
 | |
|     const { err, dev = false, ampPath = "", pageConfig = {}, buildManifest, reactLoadableManifest, ErrorDebug, getStaticProps, getStaticPaths, getServerSideProps, isDataReq, params, previewProps, basePath, images, runtime: globalRuntime, isExperimentalCompile } = renderOpts;
 | |
|     const { App } = extra;
 | |
|     const assetQueryString = metadata.assetQueryString;
 | |
|     let Document = extra.Document;
 | |
|     let Component = renderOpts.Component;
 | |
|     const OriginComponent = Component;
 | |
|     let serverComponentsInlinedTransformStream = null;
 | |
|     const isFallback = !!query.__nextFallback;
 | |
|     const notFoundSrcPage = query.__nextNotFoundSrcPage;
 | |
|     // next internal queries should be stripped out
 | |
|     (0, _internalutils.stripInternalQueries)(query);
 | |
|     const isSSG = !!getStaticProps;
 | |
|     const isBuildTimeSSG = isSSG && renderOpts.nextExport;
 | |
|     const defaultAppGetInitialProps = App.getInitialProps === App.origGetInitialProps;
 | |
|     const hasPageGetInitialProps = !!(Component == null ? void 0 : Component.getInitialProps);
 | |
|     const hasPageScripts = Component == null ? void 0 : Component.unstable_scriptLoader;
 | |
|     const pageIsDynamic = (0, _isdynamic.isDynamicRoute)(pathname);
 | |
|     const defaultErrorGetInitialProps = pathname === "/_error" && Component.getInitialProps === Component.origGetInitialProps;
 | |
|     if (renderOpts.nextExport && hasPageGetInitialProps && !defaultErrorGetInitialProps) {
 | |
|         warn(`Detected getInitialProps on page '${pathname}'` + ` while running export. It's recommended to use getStaticProps` + ` which has a more correct behavior for static exporting.` + `\nRead more: https://nextjs.org/docs/messages/get-initial-props-export`);
 | |
|     }
 | |
|     let isAutoExport = !hasPageGetInitialProps && defaultAppGetInitialProps && !isSSG && !getServerSideProps;
 | |
|     // if we are running from experimental compile and the page
 | |
|     // would normally be automatically statically optimized
 | |
|     // ensure we set cache header so it's not rendered on-demand
 | |
|     // every request
 | |
|     if (isAutoExport && !dev && isExperimentalCompile) {
 | |
|         res.setHeader("Cache-Control", (0, _revalidate.formatRevalidate)(false));
 | |
|         isAutoExport = false;
 | |
|     }
 | |
|     if (hasPageGetInitialProps && isSSG) {
 | |
|         throw new Error(_constants.SSG_GET_INITIAL_PROPS_CONFLICT + ` ${pathname}`);
 | |
|     }
 | |
|     if (hasPageGetInitialProps && getServerSideProps) {
 | |
|         throw new Error(_constants.SERVER_PROPS_GET_INIT_PROPS_CONFLICT + ` ${pathname}`);
 | |
|     }
 | |
|     if (getServerSideProps && isSSG) {
 | |
|         throw new Error(_constants.SERVER_PROPS_SSG_CONFLICT + ` ${pathname}`);
 | |
|     }
 | |
|     if (getServerSideProps && renderOpts.nextConfigOutput === "export") {
 | |
|         throw new Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');
 | |
|     }
 | |
|     if (getStaticPaths && !pageIsDynamic) {
 | |
|         throw new Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${pathname}'.` + `\nRead more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`);
 | |
|     }
 | |
|     if (!!getStaticPaths && !isSSG) {
 | |
|         throw new Error(`getStaticPaths was added without a getStaticProps in ${pathname}. Without getStaticProps, getStaticPaths does nothing`);
 | |
|     }
 | |
|     if (isSSG && pageIsDynamic && !getStaticPaths) {
 | |
|         throw new Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${pathname}'.` + `\nRead more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`);
 | |
|     }
 | |
|     let asPath = renderOpts.resolvedAsPath || req.url;
 | |
|     if (dev) {
 | |
|         const { isValidElementType } = require("next/dist/compiled/react-is");
 | |
|         if (!isValidElementType(Component)) {
 | |
|             throw new Error(`The default export is not a React Component in page: "${pathname}"`);
 | |
|         }
 | |
|         if (!isValidElementType(App)) {
 | |
|             throw new Error(`The default export is not a React Component in page: "/_app"`);
 | |
|         }
 | |
|         if (!isValidElementType(Document)) {
 | |
|             throw new Error(`The default export is not a React Component in page: "/_document"`);
 | |
|         }
 | |
|         if (isAutoExport || isFallback) {
 | |
|             // remove query values except ones that will be set during export
 | |
|             query = {
 | |
|                 ...query.amp ? {
 | |
|                     amp: query.amp
 | |
|                 } : {}
 | |
|             };
 | |
|             asPath = `${pathname}${// ensure trailing slash is present for non-dynamic auto-export pages
 | |
|             req.url.endsWith("/") && pathname !== "/" && !pageIsDynamic ? "/" : ""}`;
 | |
|             req.url = pathname;
 | |
|         }
 | |
|         if (pathname === "/404" && (hasPageGetInitialProps || getServerSideProps)) {
 | |
|             throw new Error(`\`pages/404\` ${_constants.STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}`);
 | |
|         }
 | |
|         if (_constants1.STATIC_STATUS_PAGES.includes(pathname) && (hasPageGetInitialProps || getServerSideProps)) {
 | |
|             throw new Error(`\`pages${pathname}\` ${_constants.STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}`);
 | |
|         }
 | |
|     }
 | |
|     for (const methodName of [
 | |
|         "getStaticProps",
 | |
|         "getServerSideProps",
 | |
|         "getStaticPaths"
 | |
|     ]){
 | |
|         if (Component == null ? void 0 : Component[methodName]) {
 | |
|             throw new Error(`page ${pathname} ${methodName} ${_constants.GSSP_COMPONENT_MEMBER_ERROR}`);
 | |
|         }
 | |
|     }
 | |
|     await _loadablesharedruntime.default.preloadAll() // Make sure all dynamic imports are loaded
 | |
|     ;
 | |
|     let isPreview = undefined;
 | |
|     let previewData;
 | |
|     if ((isSSG || getServerSideProps) && !isFallback && process.env.NEXT_RUNTIME !== "edge" && previewProps) {
 | |
|         // Reads of this are cached on the `req` object, so this should resolve
 | |
|         // instantly. There's no need to pass this data down from a previous
 | |
|         // invoke.
 | |
|         previewData = tryGetPreviewData(req, res, previewProps);
 | |
|         isPreview = previewData !== false;
 | |
|     }
 | |
|     // url will always be set
 | |
|     const routerIsReady = !!(getServerSideProps || hasPageGetInitialProps || !defaultAppGetInitialProps && !isSSG || isExperimentalCompile);
 | |
|     const router = new ServerRouter(pathname, query, asPath, {
 | |
|         isFallback: isFallback
 | |
|     }, routerIsReady, basePath, renderOpts.locale, renderOpts.locales, renderOpts.defaultLocale, renderOpts.domainLocales, isPreview, (0, _requestmeta.getRequestMeta)(req, "isLocaleDomain"));
 | |
|     const appRouter = (0, _adapters.adaptForAppRouterInstance)(router);
 | |
|     let scriptLoader = {};
 | |
|     const jsxStyleRegistry = (0, _styledjsx.createStyleRegistry)();
 | |
|     const ampState = {
 | |
|         ampFirst: pageConfig.amp === true,
 | |
|         hasQuery: Boolean(query.amp),
 | |
|         hybrid: pageConfig.amp === "hybrid"
 | |
|     };
 | |
|     // Disable AMP under the web environment
 | |
|     const inAmpMode = process.env.NEXT_RUNTIME !== "edge" && (0, _ampmode.isInAmpMode)(ampState);
 | |
|     let head = (0, _head.defaultHead)(inAmpMode);
 | |
|     const reactLoadableModules = [];
 | |
|     let initialScripts = {};
 | |
|     if (hasPageScripts) {
 | |
|         initialScripts.beforeInteractive = [].concat(hasPageScripts()).filter((script)=>script.props.strategy === "beforeInteractive").map((script)=>script.props);
 | |
|     }
 | |
|     const AppContainer = ({ children })=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {
 | |
|             value: appRouter,
 | |
|             children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {
 | |
|                 value: (0, _adapters.adaptForSearchParams)(router),
 | |
|                 children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_adapters.PathnameContextProviderAdapter, {
 | |
|                     router: router,
 | |
|                     isAutoExport: isAutoExport,
 | |
|                     children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {
 | |
|                         value: (0, _adapters.adaptForPathParams)(router),
 | |
|                         children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routercontextsharedruntime.RouterContext.Provider, {
 | |
|                             value: router,
 | |
|                             children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_ampcontextsharedruntime.AmpStateContext.Provider, {
 | |
|                                 value: ampState,
 | |
|                                 children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {
 | |
|                                     value: {
 | |
|                                         updateHead: (state)=>{
 | |
|                                             head = state;
 | |
|                                         },
 | |
|                                         updateScripts: (scripts)=>{
 | |
|                                             scriptLoader = scripts;
 | |
|                                         },
 | |
|                                         scripts: initialScripts,
 | |
|                                         mountedInstances: new Set()
 | |
|                                     },
 | |
|                                     children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_loadablecontextsharedruntime.LoadableContext.Provider, {
 | |
|                                         value: (moduleName)=>reactLoadableModules.push(moduleName),
 | |
|                                         children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_styledjsx.StyleRegistry, {
 | |
|                                             registry: jsxStyleRegistry,
 | |
|                                             children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {
 | |
|                                                 value: images,
 | |
|                                                 children: children
 | |
|                                             })
 | |
|                                         })
 | |
|                                     })
 | |
|                                 })
 | |
|                             })
 | |
|                         })
 | |
|                     })
 | |
|                 })
 | |
|             })
 | |
|         });
 | |
|     // The `useId` API uses the path indexes to generate an ID for each node.
 | |
|     // To guarantee the match of hydration, we need to ensure that the structure
 | |
|     // of wrapper nodes is isomorphic in server and client.
 | |
|     // TODO: With `enhanceApp` and `enhanceComponents` options, this approach may
 | |
|     // not be useful.
 | |
|     // https://github.com/facebook/react/pull/22644
 | |
|     const Noop = ()=>null;
 | |
|     const AppContainerWithIsomorphicFiberStructure = ({ children })=>{
 | |
|         return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
 | |
|             children: [
 | |
|                 /*#__PURE__*/ (0, _jsxruntime.jsx)(Noop, {}),
 | |
|                 /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainer, {
 | |
|                     children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
 | |
|                         children: [
 | |
|                             dev ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
 | |
|                                 children: [
 | |
|                                     children,
 | |
|                                     /*#__PURE__*/ (0, _jsxruntime.jsx)(Noop, {})
 | |
|                                 ]
 | |
|                             }) : children,
 | |
|                             /*#__PURE__*/ (0, _jsxruntime.jsx)(Noop, {})
 | |
|                         ]
 | |
|                     })
 | |
|                 })
 | |
|             ]
 | |
|         });
 | |
|     };
 | |
|     const ctx = {
 | |
|         err,
 | |
|         req: isAutoExport ? undefined : req,
 | |
|         res: isAutoExport ? undefined : res,
 | |
|         pathname,
 | |
|         query,
 | |
|         asPath,
 | |
|         locale: renderOpts.locale,
 | |
|         locales: renderOpts.locales,
 | |
|         defaultLocale: renderOpts.defaultLocale,
 | |
|         AppTree: (props)=>{
 | |
|             return /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainerWithIsomorphicFiberStructure, {
 | |
|                 children: renderPageTree(App, OriginComponent, {
 | |
|                     ...props,
 | |
|                     router
 | |
|                 })
 | |
|             });
 | |
|         },
 | |
|         defaultGetInitialProps: async (docCtx, options = {})=>{
 | |
|             const enhanceApp = (AppComp)=>{
 | |
|                 return (props)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(AppComp, {
 | |
|                         ...props
 | |
|                     });
 | |
|             };
 | |
|             const { html, head: renderPageHead } = await docCtx.renderPage({
 | |
|                 enhanceApp
 | |
|             });
 | |
|             const styles = jsxStyleRegistry.styles({
 | |
|                 nonce: options.nonce
 | |
|             });
 | |
|             jsxStyleRegistry.flush();
 | |
|             return {
 | |
|                 html,
 | |
|                 head: renderPageHead,
 | |
|                 styles
 | |
|             };
 | |
|         }
 | |
|     };
 | |
|     let props;
 | |
|     const nextExport = !isSSG && (renderOpts.nextExport || dev && (isAutoExport || isFallback));
 | |
|     const styledJsxInsertedHTML = ()=>{
 | |
|         const styles = jsxStyleRegistry.styles();
 | |
|         jsxStyleRegistry.flush();
 | |
|         return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {
 | |
|             children: styles
 | |
|         });
 | |
|     };
 | |
|     props = await (0, _utils.loadGetInitialProps)(App, {
 | |
|         AppTree: ctx.AppTree,
 | |
|         Component,
 | |
|         router,
 | |
|         ctx
 | |
|     });
 | |
|     if ((isSSG || getServerSideProps) && isPreview) {
 | |
|         props.__N_PREVIEW = true;
 | |
|     }
 | |
|     if (isSSG) {
 | |
|         props[_constants1.STATIC_PROPS_ID] = true;
 | |
|     }
 | |
|     if (isSSG && !isFallback) {
 | |
|         let data;
 | |
|         try {
 | |
|             data = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.getStaticProps, {
 | |
|                 spanName: `getStaticProps ${pathname}`,
 | |
|                 attributes: {
 | |
|                     "next.route": pathname
 | |
|                 }
 | |
|             }, ()=>getStaticProps({
 | |
|                     ...pageIsDynamic ? {
 | |
|                         params: query
 | |
|                     } : undefined,
 | |
|                     ...isPreview ? {
 | |
|                         draftMode: true,
 | |
|                         preview: true,
 | |
|                         previewData: previewData
 | |
|                     } : undefined,
 | |
|                     locales: renderOpts.locales,
 | |
|                     locale: renderOpts.locale,
 | |
|                     defaultLocale: renderOpts.defaultLocale
 | |
|                 }));
 | |
|         } catch (staticPropsError) {
 | |
|             // remove not found error code to prevent triggering legacy
 | |
|             // 404 rendering
 | |
|             if (staticPropsError && staticPropsError.code === "ENOENT") {
 | |
|                 delete staticPropsError.code;
 | |
|             }
 | |
|             throw staticPropsError;
 | |
|         }
 | |
|         if (data == null) {
 | |
|             throw new Error(_constants.GSP_NO_RETURNED_VALUE);
 | |
|         }
 | |
|         const invalidKeys = Object.keys(data).filter((key)=>key !== "revalidate" && key !== "props" && key !== "redirect" && key !== "notFound");
 | |
|         if (invalidKeys.includes("unstable_revalidate")) {
 | |
|             throw new Error(_constants.UNSTABLE_REVALIDATE_RENAME_ERROR);
 | |
|         }
 | |
|         if (invalidKeys.length) {
 | |
|             throw new Error(invalidKeysMsg("getStaticProps", invalidKeys));
 | |
|         }
 | |
|         if (process.env.NODE_ENV !== "production") {
 | |
|             if (typeof data.notFound !== "undefined" && typeof data.redirect !== "undefined") {
 | |
|                 throw new Error(`\`redirect\` and \`notFound\` can not both be returned from ${isSSG ? "getStaticProps" : "getServerSideProps"} at the same time. Page: ${pathname}\nSee more info here: https://nextjs.org/docs/messages/gssp-mixed-not-found-redirect`);
 | |
|             }
 | |
|         }
 | |
|         if ("notFound" in data && data.notFound) {
 | |
|             if (pathname === "/404") {
 | |
|                 throw new Error(`The /404 page can not return notFound in "getStaticProps", please remove it to continue!`);
 | |
|             }
 | |
|             metadata.isNotFound = true;
 | |
|         }
 | |
|         if ("redirect" in data && data.redirect && typeof data.redirect === "object") {
 | |
|             checkRedirectValues(data.redirect, req, "getStaticProps");
 | |
|             if (isBuildTimeSSG) {
 | |
|                 throw new Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${req.url})\n` + `See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`);
 | |
|             }
 | |
|             data.props = {
 | |
|                 __N_REDIRECT: data.redirect.destination,
 | |
|                 __N_REDIRECT_STATUS: (0, _redirectstatus.getRedirectStatus)(data.redirect)
 | |
|             };
 | |
|             if (typeof data.redirect.basePath !== "undefined") {
 | |
|                 data.props.__N_REDIRECT_BASE_PATH = data.redirect.basePath;
 | |
|             }
 | |
|             metadata.isRedirect = true;
 | |
|         }
 | |
|         if ((dev || isBuildTimeSSG) && !metadata.isNotFound && !(0, _isserializableprops.isSerializableProps)(pathname, "getStaticProps", data.props)) {
 | |
|             // this fn should throw an error instead of ever returning `false`
 | |
|             throw new Error("invariant: getStaticProps did not return valid props. Please report this.");
 | |
|         }
 | |
|         let revalidate;
 | |
|         if ("revalidate" in data) {
 | |
|             if (data.revalidate && renderOpts.nextConfigOutput === "export") {
 | |
|                 throw new Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export');
 | |
|             }
 | |
|             if (typeof data.revalidate === "number") {
 | |
|                 if (!Number.isInteger(data.revalidate)) {
 | |
|                     throw new Error(`A page's revalidate option must be seconds expressed as a natural number for ${req.url}. Mixed numbers, such as '${data.revalidate}', cannot be used.` + `\nTry changing the value to '${Math.ceil(data.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`);
 | |
|                 } else if (data.revalidate <= 0) {
 | |
|                     throw new Error(`A page's revalidate option can not be less than or equal to zero for ${req.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.` + `\n\nTo never revalidate, you can set revalidate to \`false\` (only ran once at build-time).` + `\nTo revalidate as soon as possible, you can set the value to \`1\`.`);
 | |
|                 } else {
 | |
|                     if (data.revalidate > 31536000) {
 | |
|                         // if it's greater than a year for some reason error
 | |
|                         console.warn(`Warning: A page's revalidate option was set to more than a year for ${req.url}. This may have been done in error.` + `\nTo only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`);
 | |
|                     }
 | |
|                     revalidate = data.revalidate;
 | |
|                 }
 | |
|             } else if (data.revalidate === true) {
 | |
|                 // When enabled, revalidate after 1 second. This value is optimal for
 | |
|                 // the most up-to-date page possible, but without a 1-to-1
 | |
|                 // request-refresh ratio.
 | |
|                 revalidate = 1;
 | |
|             } else if (data.revalidate === false || typeof data.revalidate === "undefined") {
 | |
|                 // By default, we never revalidate.
 | |
|                 revalidate = false;
 | |
|             } else {
 | |
|                 throw new Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(data.revalidate)}' for ${req.url}`);
 | |
|             }
 | |
|         } else {
 | |
|             // By default, we never revalidate.
 | |
|             revalidate = false;
 | |
|         }
 | |
|         props.pageProps = Object.assign({}, props.pageProps, "props" in data ? data.props : undefined);
 | |
|         // pass up revalidate and props for export
 | |
|         metadata.revalidate = revalidate;
 | |
|         metadata.pageData = props;
 | |
|         // this must come after revalidate is added to renderResultMeta
 | |
|         if (metadata.isNotFound) {
 | |
|             return new _renderresult.default(null, {
 | |
|                 metadata
 | |
|             });
 | |
|         }
 | |
|     }
 | |
|     if (getServerSideProps) {
 | |
|         props[_constants1.SERVER_PROPS_ID] = true;
 | |
|     }
 | |
|     if (getServerSideProps && !isFallback) {
 | |
|         let data;
 | |
|         let canAccessRes = true;
 | |
|         let resOrProxy = res;
 | |
|         let deferredContent = false;
 | |
|         if (process.env.NODE_ENV !== "production") {
 | |
|             resOrProxy = new Proxy(res, {
 | |
|                 get: function(obj, prop) {
 | |
|                     if (!canAccessRes) {
 | |
|                         const message = `You should not access 'res' after getServerSideProps resolves.` + `\nRead more: https://nextjs.org/docs/messages/gssp-no-mutating-res`;
 | |
|                         if (deferredContent) {
 | |
|                             throw new Error(message);
 | |
|                         } else {
 | |
|                             warn(message);
 | |
|                         }
 | |
|                     }
 | |
|                     if (typeof prop === "symbol") {
 | |
|                         return _reflect.ReflectAdapter.get(obj, prop, res);
 | |
|                     }
 | |
|                     return _reflect.ReflectAdapter.get(obj, prop, res);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|         try {
 | |
|             data = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.getServerSideProps, {
 | |
|                 spanName: `getServerSideProps ${pathname}`,
 | |
|                 attributes: {
 | |
|                     "next.route": pathname
 | |
|                 }
 | |
|             }, async ()=>getServerSideProps({
 | |
|                     req: req,
 | |
|                     res: resOrProxy,
 | |
|                     query,
 | |
|                     resolvedUrl: renderOpts.resolvedUrl,
 | |
|                     ...pageIsDynamic ? {
 | |
|                         params: params
 | |
|                     } : undefined,
 | |
|                     ...previewData !== false ? {
 | |
|                         draftMode: true,
 | |
|                         preview: true,
 | |
|                         previewData: previewData
 | |
|                     } : undefined,
 | |
|                     locales: renderOpts.locales,
 | |
|                     locale: renderOpts.locale,
 | |
|                     defaultLocale: renderOpts.defaultLocale
 | |
|                 }));
 | |
|             canAccessRes = false;
 | |
|         } catch (serverSidePropsError) {
 | |
|             // remove not found error code to prevent triggering legacy
 | |
|             // 404 rendering
 | |
|             if ((0, _iserror.default)(serverSidePropsError) && serverSidePropsError.code === "ENOENT") {
 | |
|                 delete serverSidePropsError.code;
 | |
|             }
 | |
|             throw serverSidePropsError;
 | |
|         }
 | |
|         if (data == null) {
 | |
|             throw new Error(_constants.GSSP_NO_RETURNED_VALUE);
 | |
|         }
 | |
|         if (data.props instanceof Promise) {
 | |
|             deferredContent = true;
 | |
|         }
 | |
|         const invalidKeys = Object.keys(data).filter((key)=>key !== "props" && key !== "redirect" && key !== "notFound");
 | |
|         if (data.unstable_notFound) {
 | |
|             throw new Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${pathname}`);
 | |
|         }
 | |
|         if (data.unstable_redirect) {
 | |
|             throw new Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${pathname}`);
 | |
|         }
 | |
|         if (invalidKeys.length) {
 | |
|             throw new Error(invalidKeysMsg("getServerSideProps", invalidKeys));
 | |
|         }
 | |
|         if ("notFound" in data && data.notFound) {
 | |
|             if (pathname === "/404") {
 | |
|                 throw new Error(`The /404 page can not return notFound in "getStaticProps", please remove it to continue!`);
 | |
|             }
 | |
|             metadata.isNotFound = true;
 | |
|             return new _renderresult.default(null, {
 | |
|                 metadata
 | |
|             });
 | |
|         }
 | |
|         if ("redirect" in data && typeof data.redirect === "object") {
 | |
|             checkRedirectValues(data.redirect, req, "getServerSideProps");
 | |
|             data.props = {
 | |
|                 __N_REDIRECT: data.redirect.destination,
 | |
|                 __N_REDIRECT_STATUS: (0, _redirectstatus.getRedirectStatus)(data.redirect)
 | |
|             };
 | |
|             if (typeof data.redirect.basePath !== "undefined") {
 | |
|                 data.props.__N_REDIRECT_BASE_PATH = data.redirect.basePath;
 | |
|             }
 | |
|             metadata.isRedirect = true;
 | |
|         }
 | |
|         if (deferredContent) {
 | |
|             data.props = await data.props;
 | |
|         }
 | |
|         if ((dev || isBuildTimeSSG) && !(0, _isserializableprops.isSerializableProps)(pathname, "getServerSideProps", data.props)) {
 | |
|             // this fn should throw an error instead of ever returning `false`
 | |
|             throw new Error("invariant: getServerSideProps did not return valid props. Please report this.");
 | |
|         }
 | |
|         props.pageProps = Object.assign({}, props.pageProps, data.props);
 | |
|         metadata.pageData = props;
 | |
|     }
 | |
|     if (!isSSG && // we only show this warning for legacy pages
 | |
|     !getServerSideProps && process.env.NODE_ENV !== "production" && Object.keys((props == null ? void 0 : props.pageProps) || {}).includes("url")) {
 | |
|         console.warn(`The prop \`url\` is a reserved prop in Next.js for legacy reasons and will be overridden on page ${pathname}\n` + `See more info here: https://nextjs.org/docs/messages/reserved-page-prop`);
 | |
|     }
 | |
|     // Avoid rendering page un-necessarily for getServerSideProps data request
 | |
|     // and getServerSideProps/getStaticProps redirects
 | |
|     if (isDataReq && !isSSG || metadata.isRedirect) {
 | |
|         return new _renderresult.default(JSON.stringify(props), {
 | |
|             metadata
 | |
|         });
 | |
|     }
 | |
|     // We don't call getStaticProps or getServerSideProps while generating
 | |
|     // the fallback so make sure to set pageProps to an empty object
 | |
|     if (isFallback) {
 | |
|         props.pageProps = {};
 | |
|     }
 | |
|     // the response might be finished on the getInitialProps call
 | |
|     if ((0, _utils.isResSent)(res) && !isSSG) return new _renderresult.default(null, {
 | |
|         metadata
 | |
|     });
 | |
|     // we preload the buildManifest for auto-export dynamic pages
 | |
|     // to speed up hydrating query values
 | |
|     let filteredBuildManifest = buildManifest;
 | |
|     if (isAutoExport && pageIsDynamic) {
 | |
|         const page = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(pathname));
 | |
|         // This code would be much cleaner using `immer` and directly pushing into
 | |
|         // the result from `getPageFiles`, we could maybe consider that in the
 | |
|         // future.
 | |
|         if (page in filteredBuildManifest.pages) {
 | |
|             filteredBuildManifest = {
 | |
|                 ...filteredBuildManifest,
 | |
|                 pages: {
 | |
|                     ...filteredBuildManifest.pages,
 | |
|                     [page]: [
 | |
|                         ...filteredBuildManifest.pages[page],
 | |
|                         ...filteredBuildManifest.lowPriorityFiles.filter((f)=>f.includes("_buildManifest"))
 | |
|                     ]
 | |
|                 },
 | |
|                 lowPriorityFiles: filteredBuildManifest.lowPriorityFiles.filter((f)=>!f.includes("_buildManifest"))
 | |
|             };
 | |
|         }
 | |
|     }
 | |
|     const Body = ({ children })=>{
 | |
|         return inAmpMode ? children : /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
 | |
|             id: "__next",
 | |
|             children: children
 | |
|         });
 | |
|     };
 | |
|     const renderDocument = async ()=>{
 | |
|         // For `Document`, there are two cases that we don't support:
 | |
|         // 1. Using `Document.getInitialProps` in the Edge runtime.
 | |
|         // 2. Using the class component `Document` with concurrent features.
 | |
|         const BuiltinFunctionalDocument = Document[_constants1.NEXT_BUILTIN_DOCUMENT];
 | |
|         if (process.env.NEXT_RUNTIME === "edge" && Document.getInitialProps) {
 | |
|             // In the Edge runtime, `Document.getInitialProps` isn't supported.
 | |
|             // We throw an error here if it's customized.
 | |
|             if (BuiltinFunctionalDocument) {
 | |
|                 Document = BuiltinFunctionalDocument;
 | |
|             } else {
 | |
|                 throw new Error("`getInitialProps` in Document component is not supported with the Edge Runtime.");
 | |
|             }
 | |
|         }
 | |
|         async function loadDocumentInitialProps(renderShell) {
 | |
|             const renderPage = async (options = {})=>{
 | |
|                 if (ctx.err && ErrorDebug) {
 | |
|                     // Always start rendering the shell even if there's an error.
 | |
|                     if (renderShell) {
 | |
|                         renderShell(App, Component);
 | |
|                     }
 | |
|                     const html = await renderToString(/*#__PURE__*/ (0, _jsxruntime.jsx)(Body, {
 | |
|                         children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorDebug, {
 | |
|                             error: ctx.err
 | |
|                         })
 | |
|                     }));
 | |
|                     return {
 | |
|                         html,
 | |
|                         head
 | |
|                     };
 | |
|                 }
 | |
|                 if (dev && (props.router || props.Component)) {
 | |
|                     throw new Error(`'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props`);
 | |
|                 }
 | |
|                 const { App: EnhancedApp, Component: EnhancedComponent } = enhanceComponents(options, App, Component);
 | |
|                 if (renderShell) {
 | |
|                     return renderShell(EnhancedApp, EnhancedComponent).then(async (stream)=>{
 | |
|                         await stream.allReady;
 | |
|                         const html = await (0, _nodewebstreamshelper.streamToString)(stream);
 | |
|                         return {
 | |
|                             html,
 | |
|                             head
 | |
|                         };
 | |
|                     });
 | |
|                 }
 | |
|                 const html = await renderToString(/*#__PURE__*/ (0, _jsxruntime.jsx)(Body, {
 | |
|                     children: /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainerWithIsomorphicFiberStructure, {
 | |
|                         children: renderPageTree(EnhancedApp, EnhancedComponent, {
 | |
|                             ...props,
 | |
|                             router
 | |
|                         })
 | |
|                     })
 | |
|                 }));
 | |
|                 return {
 | |
|                     html,
 | |
|                     head
 | |
|                 };
 | |
|             };
 | |
|             const documentCtx = {
 | |
|                 ...ctx,
 | |
|                 renderPage
 | |
|             };
 | |
|             const docProps = await (0, _utils.loadGetInitialProps)(Document, documentCtx);
 | |
|             // the response might be finished on the getInitialProps call
 | |
|             if ((0, _utils.isResSent)(res) && !isSSG) return null;
 | |
|             if (!docProps || typeof docProps.html !== "string") {
 | |
|                 const message = `"${(0, _utils.getDisplayName)(Document)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;
 | |
|                 throw new Error(message);
 | |
|             }
 | |
|             return {
 | |
|                 docProps,
 | |
|                 documentCtx
 | |
|             };
 | |
|         }
 | |
|         const renderContent = (_App, _Component)=>{
 | |
|             const EnhancedApp = _App || App;
 | |
|             const EnhancedComponent = _Component || Component;
 | |
|             return ctx.err && ErrorDebug ? /*#__PURE__*/ (0, _jsxruntime.jsx)(Body, {
 | |
|                 children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorDebug, {
 | |
|                     error: ctx.err
 | |
|                 })
 | |
|             }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(Body, {
 | |
|                 children: /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainerWithIsomorphicFiberStructure, {
 | |
|                     children: renderPageTree(EnhancedApp, EnhancedComponent, {
 | |
|                         ...props,
 | |
|                         router
 | |
|                     })
 | |
|                 })
 | |
|             });
 | |
|         };
 | |
|         // Always using react concurrent rendering mode with required react version 18.x
 | |
|         const renderShell = async (EnhancedApp, EnhancedComponent)=>{
 | |
|             const content = renderContent(EnhancedApp, EnhancedComponent);
 | |
|             return await (0, _nodewebstreamshelper.renderToInitialFizzStream)({
 | |
|                 ReactDOMServer: _serverbrowser.default,
 | |
|                 element: content
 | |
|             });
 | |
|         };
 | |
|         const createBodyResult = (0, _tracer.getTracer)().wrap(_constants2.RenderSpan.createBodyResult, (initialStream, suffix)=>{
 | |
|             return (0, _nodewebstreamshelper.continueFizzStream)(initialStream, {
 | |
|                 suffix,
 | |
|                 inlinedDataStream: serverComponentsInlinedTransformStream == null ? void 0 : serverComponentsInlinedTransformStream.readable,
 | |
|                 isStaticGeneration: true,
 | |
|                 // this must be called inside bodyResult so appWrappers is
 | |
|                 // up to date when `wrapApp` is called
 | |
|                 getServerInsertedHTML: ()=>{
 | |
|                     return renderToString(styledJsxInsertedHTML());
 | |
|                 },
 | |
|                 serverInsertedHTMLToHead: false,
 | |
|                 validateRootLayout: undefined
 | |
|             });
 | |
|         });
 | |
|         const hasDocumentGetInitialProps = !(process.env.NEXT_RUNTIME === "edge" || !Document.getInitialProps);
 | |
|         let bodyResult;
 | |
|         // If it has getInitialProps, we will render the shell in `renderPage`.
 | |
|         // Otherwise we do it right now.
 | |
|         let documentInitialPropsRes;
 | |
|         if (hasDocumentGetInitialProps) {
 | |
|             documentInitialPropsRes = await loadDocumentInitialProps(renderShell);
 | |
|             if (documentInitialPropsRes === null) return null;
 | |
|             const { docProps } = documentInitialPropsRes;
 | |
|             // includes suffix in initial html stream
 | |
|             bodyResult = (suffix)=>createBodyResult((0, _nodewebstreamshelper.streamFromString)(docProps.html + suffix));
 | |
|         } else {
 | |
|             const stream = await renderShell(App, Component);
 | |
|             bodyResult = (suffix)=>createBodyResult(stream, suffix);
 | |
|             documentInitialPropsRes = {};
 | |
|         }
 | |
|         const { docProps } = documentInitialPropsRes || {};
 | |
|         const documentElement = (htmlProps)=>{
 | |
|             if (process.env.NEXT_RUNTIME === "edge") {
 | |
|                 return Document();
 | |
|             } else {
 | |
|                 return /*#__PURE__*/ (0, _jsxruntime.jsx)(Document, {
 | |
|                     ...htmlProps,
 | |
|                     ...docProps
 | |
|                 });
 | |
|             }
 | |
|         };
 | |
|         let styles;
 | |
|         if (hasDocumentGetInitialProps) {
 | |
|             styles = docProps.styles;
 | |
|             head = docProps.head;
 | |
|         } else {
 | |
|             styles = jsxStyleRegistry.styles();
 | |
|             jsxStyleRegistry.flush();
 | |
|         }
 | |
|         return {
 | |
|             bodyResult,
 | |
|             documentElement,
 | |
|             head,
 | |
|             headTags: [],
 | |
|             styles
 | |
|         };
 | |
|     };
 | |
|     (_getTracer_getRootSpanAttributes = (0, _tracer.getTracer)().getRootSpanAttributes()) == null ? void 0 : _getTracer_getRootSpanAttributes.set("next.route", renderOpts.page);
 | |
|     const documentResult = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.renderDocument, {
 | |
|         spanName: `render route (pages) ${renderOpts.page}`,
 | |
|         attributes: {
 | |
|             "next.route": renderOpts.page
 | |
|         }
 | |
|     }, async ()=>renderDocument());
 | |
|     if (!documentResult) {
 | |
|         return new _renderresult.default(null, {
 | |
|             metadata
 | |
|         });
 | |
|     }
 | |
|     const dynamicImportsIds = new Set();
 | |
|     const dynamicImports = new Set();
 | |
|     for (const mod of reactLoadableModules){
 | |
|         const manifestItem = reactLoadableManifest[mod];
 | |
|         if (manifestItem) {
 | |
|             dynamicImportsIds.add(manifestItem.id);
 | |
|             manifestItem.files.forEach((item)=>{
 | |
|                 dynamicImports.add(item);
 | |
|             });
 | |
|         }
 | |
|     }
 | |
|     const hybridAmp = ampState.hybrid;
 | |
|     const docComponentsRendered = {};
 | |
|     const { assetPrefix, buildId, customServer, defaultLocale, disableOptimizedLoading, domainLocales, locale, locales, runtimeConfig } = renderOpts;
 | |
|     const htmlProps = {
 | |
|         __NEXT_DATA__: {
 | |
|             props,
 | |
|             page: pathname,
 | |
|             query,
 | |
|             buildId,
 | |
|             assetPrefix: assetPrefix === "" ? undefined : assetPrefix,
 | |
|             runtimeConfig,
 | |
|             nextExport: nextExport === true ? true : undefined,
 | |
|             autoExport: isAutoExport === true ? true : undefined,
 | |
|             isFallback,
 | |
|             isExperimentalCompile,
 | |
|             dynamicIds: dynamicImportsIds.size === 0 ? undefined : Array.from(dynamicImportsIds),
 | |
|             err: renderOpts.err ? serializeError(dev, renderOpts.err) : undefined,
 | |
|             gsp: !!getStaticProps ? true : undefined,
 | |
|             gssp: !!getServerSideProps ? true : undefined,
 | |
|             customServer,
 | |
|             gip: hasPageGetInitialProps ? true : undefined,
 | |
|             appGip: !defaultAppGetInitialProps ? true : undefined,
 | |
|             locale,
 | |
|             locales,
 | |
|             defaultLocale,
 | |
|             domainLocales,
 | |
|             isPreview: isPreview === true ? true : undefined,
 | |
|             notFoundSrcPage: notFoundSrcPage && dev ? notFoundSrcPage : undefined
 | |
|         },
 | |
|         strictNextHead: renderOpts.strictNextHead,
 | |
|         buildManifest: filteredBuildManifest,
 | |
|         docComponentsRendered,
 | |
|         dangerousAsPath: router.asPath,
 | |
|         canonicalBase: !renderOpts.ampPath && (0, _requestmeta.getRequestMeta)(req, "didStripLocale") ? `${renderOpts.canonicalBase || ""}/${renderOpts.locale}` : renderOpts.canonicalBase,
 | |
|         ampPath,
 | |
|         inAmpMode,
 | |
|         isDevelopment: !!dev,
 | |
|         hybridAmp,
 | |
|         dynamicImports: Array.from(dynamicImports),
 | |
|         assetPrefix,
 | |
|         // Only enabled in production as development mode has features relying on HMR (style injection for example)
 | |
|         unstable_runtimeJS: process.env.NODE_ENV === "production" ? pageConfig.unstable_runtimeJS : undefined,
 | |
|         unstable_JsPreload: pageConfig.unstable_JsPreload,
 | |
|         assetQueryString,
 | |
|         scriptLoader,
 | |
|         locale,
 | |
|         disableOptimizedLoading,
 | |
|         head: documentResult.head,
 | |
|         headTags: documentResult.headTags,
 | |
|         styles: documentResult.styles,
 | |
|         crossOrigin: renderOpts.crossOrigin,
 | |
|         optimizeCss: renderOpts.optimizeCss,
 | |
|         optimizeFonts: renderOpts.optimizeFonts,
 | |
|         nextConfigOutput: renderOpts.nextConfigOutput,
 | |
|         nextScriptWorkers: renderOpts.nextScriptWorkers,
 | |
|         runtime: globalRuntime,
 | |
|         largePageDataBytes: renderOpts.largePageDataBytes,
 | |
|         nextFontManifest: renderOpts.nextFontManifest
 | |
|     };
 | |
|     const document = /*#__PURE__*/ (0, _jsxruntime.jsx)(_ampcontextsharedruntime.AmpStateContext.Provider, {
 | |
|         value: ampState,
 | |
|         children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_htmlcontextsharedruntime.HtmlContext.Provider, {
 | |
|             value: htmlProps,
 | |
|             children: documentResult.documentElement(htmlProps)
 | |
|         })
 | |
|     });
 | |
|     const documentHTML = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.renderToString, async ()=>renderToString(document));
 | |
|     if (process.env.NODE_ENV !== "production") {
 | |
|         const nonRenderedComponents = [];
 | |
|         const expectedDocComponents = [
 | |
|             "Main",
 | |
|             "Head",
 | |
|             "NextScript",
 | |
|             "Html"
 | |
|         ];
 | |
|         for (const comp of expectedDocComponents){
 | |
|             if (!docComponentsRendered[comp]) {
 | |
|                 nonRenderedComponents.push(comp);
 | |
|             }
 | |
|         }
 | |
|         if (nonRenderedComponents.length) {
 | |
|             const missingComponentList = nonRenderedComponents.map((e)=>`<${e} />`).join(", ");
 | |
|             const plural = nonRenderedComponents.length !== 1 ? "s" : "";
 | |
|             console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${plural}.\n` + `Missing component${plural}: ${missingComponentList}\n` + "Read how to fix here: https://nextjs.org/docs/messages/missing-document-component");
 | |
|         }
 | |
|     }
 | |
|     const [renderTargetPrefix, renderTargetSuffix] = documentHTML.split("<next-js-internal-body-render-target></next-js-internal-body-render-target>", 2);
 | |
|     let prefix = "";
 | |
|     if (!documentHTML.startsWith(DOCTYPE)) {
 | |
|         prefix += DOCTYPE;
 | |
|     }
 | |
|     prefix += renderTargetPrefix;
 | |
|     if (inAmpMode) {
 | |
|         prefix += "<!-- __NEXT_DATA__ -->";
 | |
|     }
 | |
|     const content = await (0, _nodewebstreamshelper.streamToString)((0, _nodewebstreamshelper.chainStreams)((0, _nodewebstreamshelper.streamFromString)(prefix), await documentResult.bodyResult(renderTargetSuffix)));
 | |
|     const optimizedHtml = await postProcessHTML(pathname, content, renderOpts, {
 | |
|         inAmpMode,
 | |
|         hybridAmp
 | |
|     });
 | |
|     return new _renderresult.default(optimizedHtml, {
 | |
|         metadata
 | |
|     });
 | |
| }
 | |
| const renderToHTML = (req, res, pathname, query, renderOpts)=>{
 | |
|     return renderToHTMLImpl(req, res, pathname, query, renderOpts, renderOpts);
 | |
| };
 | |
| 
 | |
| //# sourceMappingURL=render.js.map
 |